Faraday: рдорд┐рдбрд▓рд╡реЗрдпрд░ рд▓рд┐рдЦрдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдВ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 21 рдЬрдире░ 2014  ┬╖  13рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: lostisland/faraday

рдпрд╣ рдореБрдЭреЗ рдкреНрд░рд▓реЗрдЦрди рд╕реЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рд░реНрдп рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдорд┐рдбрд▓рд╡реЗрдпрд░ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдЦрд░рд╛рдм рд╣реИрдВред рдЗрд╕рдХреЗ рдмрджрд▓реЗ рдХреЛрдИ рдХреБрдЫ рд╕рд╣рд╛рдпрддрд╛ рджреЗ рд╕рдХрддрд╛ рд╣реИред

# play.rb
require 'faraday'

class MyMiddleware

  attr_reader :options

  def initialize(app, options={})
    <strong i="6">@app</strong> = app
    <strong i="7">@options</strong> = options
  end

  def call(env)
    @app.call(env)
  end

end

# This doesn't seem to work either, removing for now.
# Faraday.register_middleware :request, my_middlware: lambda { MyMiddleware }

client = Faraday.new do |conn|
  # conn.request :my_middleware, foo: :bar
  conn.request MyMiddleware, foo: :bar
end

response = client.get('http://jasonwaldrip.com/')
$ ruby play.rb
/Users/jwaldrip/.rbenv/versions/1.9.3-p484/lib/ruby/gems/1.9.1/gems/faraday-0.8.9/lib/faraday.rb:64:in `lookup_middleware': MyMiddleware is not registered on Faraday::Request (RuntimeError)
    from /Users/jwaldrip/.rbenv/versions/1.9.3-p484/lib/ruby/gems/1.9.1/gems/faraday-0.8.9/lib/faraday/builder.rb:146:in `use_symbol'
    from /Users/jwaldrip/.rbenv/versions/1.9.3-p484/lib/ruby/gems/1.9.1/gems/faraday-0.8.9/lib/faraday/builder.rb:100:in `request'
    from play.rb:19:in `block in <main>'
    from /Users/jwaldrip/.rbenv/versions/1.9.3-p484/lib/ruby/gems/1.9.1/gems/faraday-0.8.9/lib/faraday/connection.rb:65:in `initialize'
    from /Users/jwaldrip/.rbenv/versions/1.9.3-p484/lib/ruby/gems/1.9.1/gems/faraday-0.8.9/lib/faraday.rb:11:in `new'
    from /Users/jwaldrip/.rbenv/versions/1.9.3-p484/lib/ruby/gems/1.9.1/gems/faraday-0.8.9/lib/faraday.rb:11:in `new'
    from play.rb:18:in `<main>'

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдПрдХ рдкреВрд░реНрдг рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рд▓реЗрдЦрди рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рдВрдмрд╛ рд░рд╛рд╕реНрддрд╛ рддрдп рдХрд░реЗрдЧрд╛ред

рд╕рднреА 13 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ conn.use рдХреЗ рдмрдЬрд╛рдп conn.request ред рдпрд╣ рдлреИрд░рд╛рдбреЗ :: рдЕрдиреБрд░реЛрдз рдореЗрдВ рдорд╛рдИ рдорд┐рдбрд▓рд╡реЗрдпрд░ рдорд┐рдбрд▓рд╡реЗрдпрд░ рджреЗрдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реИред

https://github.com/lostisland/faraday/blob/b8d90a59bafb8dd6e19488fae07945a7700f5664/lib/faraday/rack_builder.rb#L82 -L101

@technoweenie рдорд┐рдбрд▓рд╡реЗрдпрд░ рдХреЛ рдХреИрд╕реЗ рдкрдВрдЬреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛рдП, рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдмреЗрд╣рддрд░ рджрд╕реНрддрд╛рд╡реЗрдЬ рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдПред рдореБрдЭреЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдЗрд╕реЗ рдпрд╣рд╛рдВ рдХрд░рдирд╛ рдерд╛ рдФрд░ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдкрдврд╝рдирд╛ рдкрдбрд╝рд╛ рдХрд┐ рдХреИрд╕реЗред

@jwaldrip рдпрджрд┐ рдЖрдкрдиреЗ рдЕрдкрдирд╛ рдорд┐рдбрд▓рд╡реЗрдпрд░ рдкрдВрдЬреАрдХреГрдд рдХрд┐рдпрд╛ рдерд╛, рддреЛ рдЖрдк conn.request рдХрд╣ рд╕рдХреЗрдВрдЧреЗред

рдпрджрд┐ рдЖрдкрдиреЗ рдЕрдкрдирд╛ рдорд┐рдбрд▓рд╡реЗрдпрд░ рдкрдВрдЬреАрдХреГрдд рдХрд┐рдпрд╛ рдерд╛, рддреЛ рдЖрдк conn.request рдХрд╣ рд╕рдХреЗрдВрдЧреЗред

рд╕рд╛рде рд╣реА, рдЖрдкрдХреЛ рдЙрд╕ рдкреНрд░рддреАрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдЖрдкрдиреЗ рдкрдВрдЬреАрдХреГрдд рдХрд┐рдпрд╛ рдерд╛, рди рдХрд┐ рд╡рд░реНрдЧ рдХреЗ рдирд╛рдо рдХрд╛ред рдкреНрд░рддреАрдХ рдХреЗрд╡рд▓ рдкреВрд░реНрдг рд╡рд░реНрдЧ рдХреЗ рдирд╛рдо рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╢реЙрд░реНрдЯрдХрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рд╣реЛрддреЗ рд╣реИрдВред conn.request(:json) рдореВрд▓ рд░реВрдк рд╕реЗ Faraday::Request::JSON рдЬреИрд╕рд╛ рд╣реА рд╣реИред

рдорд┐рдбрд▓рд╡реЗрдпрд░ рдХреЛ рдХреИрд╕реЗ рдкрдВрдЬреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛рдП, рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдмреЗрд╣рддрд░ рджрд╕реНрддрд╛рд╡реЗрдЬ рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдПред

: +1: рдореИрдВрдиреЗ рдЗрд╕реЗ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВрдиреЗ рдорд┐рдбрд▓рд╡реЗрдпрд░ рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдмрджрд▓рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рдИ рдереАред

@jwaldrip рд╕рд╣реА рд╣реИ рдХрд┐ рдпрд╣ рдЦрд░рд╛рдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдиреБрднрд╡ рд╣реИред рдЙрдиреНрд╣реЛрдВрдиреЗ рдЙрд╕ рд▓рд╛рдЗрди рдкрд░ рдЯрд┐рдкреНрдкрдгреА рдХреА рдЬреЛ рдорд┐рдбрд▓рд╡реЗрдпрд░ рдХреЛ рдПрдХ рдкреНрд░рддреАрдХ рд╢реЙрд░реНрдЯрд╣реИрдВрдб рдХреЗ рддрд╣рдд рдкрдВрдЬреАрдХреГрдд рдХрд░рддреА рд╣реИ, рд▓реЗрдХрд┐рди conn.request рд╕реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦрддреА рд╣реИ рдЬреЛ рдХреЗрд╡рд▓ рдкреНрд░рддреАрдХ рд╢реЙрд░реНрдЯрд╣реИрдВрдб рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рдорд┐рдбрд▓рд╡реЗрдпрд░ рдирд╣реАрдВ рдорд┐рд▓ рд╕рдХрд╛ред

рд╣рдореЗрдВ рдпрд╣ рд╕реЛрдЪрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЗрд╕реЗ рдХреИрд╕реЗ рд╕реБрдзрд╛рд░рд╛ рдЬрд╛рдП, рдпрд╛ рдХрдо рд╕реЗ рдХрдо рдПрдХ рдмреЗрд╣рддрд░ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рджрд┐рдпрд╛ рдЬрд╛рдПред

рдореБрдЭреЗ рдпрд╣ рдХрд╛рдо рдорд┐рд▓ рдЧрдпрд╛, рдХреБрдЫ рд╕рдордп рд▓рдЧрд╛ред рдореБрдЭреЗ рдмрддрд╛рдПрдВ рдХрд┐ рдХреНрдпрд╛ рдореИрдВ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдпрд╛ рдорд┐рдбрд▓рд╡реЗрдпрд░ рд░реАрд╡рд░реНрдХ рдХреЗ рд╕рд╛рде рдмрд┐рд▓реНрдХреБрд▓ рднреА рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред

рдЖрдкрдиреЗ рдЕрдВрддрд┐рдо рд╕реЗрдЯрдЕрдк рдХреИрд╕рд╛ рджреЗрдЦрд╛? @jwaldrip

рдХреНрдпрд╛ рдЗрд╕рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХрднреА рдХреБрдЫ рд▓рд┐рдЦрд╛ рд╣реБрдЖ рдерд╛? рдореБрдЭреЗ рдХреБрдЫ рднреА рдЙрдкрдпреЛрдЧреА рдирд╣реАрдВ рдорд┐рд▓рд╛ рдФрд░ рдореБрдЭреЗ рдЗрд╕рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдорд┐рдирдЯреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдкрдирд╛ рд╕рд┐рд░ рдкреАрдЯрдирд╛ рдкрдбрд╝рд╛ред

@stefansedich рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕ рдЪрд░реНрдЪрд╛ рдХреЗ рдмрд╛рдж рдХреЛрдИ рдкреНрд░рддреНрдпрдХреНрд╖ рдЕрдиреБрд╡рд░реНрддреА рдпрд╛ рд╕реБрдзрд╛рд░ рд╣реБрдЖ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рдЕрдЧрд▓реЗ рдкреНрд░рдореБрдЦ рд░рд┐рд▓реАрдЬ (1.0) рдХреЗ рд╕рд╛рде рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдкрд░ рдХреБрдЫ рднрд╛рд░реА рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реЛрдЧреА рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдлрд┐рд░ рд╡ред

рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдХреЛрдИ рдкреЛрд╕реНрдЯ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЕрднреА рдХреЗ рд▓рд┐рдП рдЗрд╕ рдореБрджреНрджреЗ рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкрдВрдЬреАрдХрд░рдг рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИред

@maxim рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдорд┐рдбрд▓рд╡реЗрдпрд░ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХреБрдЫ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╡реЗрдмрд╕рд╛рдЗрдЯ рд╣реИ , рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрд╕рдореЗрдВ рдЕрднреА рднреА рд╕реБрдзрд╛рд░ рд╣реЛ рд░рд╣рд╛ рд╣реИред

рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, request рдФрд░ response рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рдкрдВрдЬреАрдХреГрдд рдорд┐рдбрд▓рд╡реЗрдпрд░ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдпрджрд┐ рдЖрдкрдХреЛ рдХрд╕реНрдЯрдо-рдирд┐рд░реНрдорд┐рдд рдХреЛ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддреЛ .use рдкрд░ рдХреЙрд▓ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред
рддреЛ рдКрдкрд░ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рдо рдХрд░реЗрдЧрд╛:

client = Faraday.new do |conn|
  conn.use MyMiddleware, foo: :bar
end

рдПрдХ рдкреВрд░реНрдг рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рд▓реЗрдЦрди рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рдВрдмрд╛ рд░рд╛рд╕реНрддрд╛ рддрдп рдХрд░реЗрдЧрд╛ред

@maxim рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдорд┐рдбрд▓рд╡реЗрдпрд░ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХреБрдЫ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╡реЗрдмрд╕рд╛рдЗрдЯ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрд╕рдореЗрдВ рдЕрднреА рднреА рд╕реБрдзрд╛рд░ рд╣реЛ рд░рд╣рд╛ рд╣реИред

рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдЕрдиреБрд░реЛрдз рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рдкрдВрдЬреАрдХреГрдд рдорд┐рдбрд▓рд╡реЗрдпрд░ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдпрджрд┐ рдЖрдкрдХреЛ рдХрд╕реНрдЯрдо-рдирд┐рд░реНрдорд┐рдд рдХреЛ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддреЛ .use рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред
рддреЛ рдКрдкрд░ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рдо рдХрд░реЗрдЧрд╛:

client = Faraday.new do |conn|
  conn.use MyMiddleware, foo: :bar
end

@iMacTia рдпрд╣ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдореЗрдВ рдирд╣реАрдВ рд╣реИ рд▓реЗрдХрд┐рди рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рд╢рд╛рдпрдж рдпрд╣ https://lostisland.github.io/faraday/middleware/custom . рдореЗрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ

@wilsonsilva рдЖрдк рдмрд┐рд▓реНрдХреБрд▓ рд╕рд╣реА рд╣реИрдВ, рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╕реБрдзрд╛рд░ рд╣реЛрдЧрд╛ ред рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдпрд╣ рдирд┐рд╖реНрдкрдХреНрд╖ рд╣реЛрдиреЗ рд╕реЗ рдЪреВрдХ рдЧрдпрд╛

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

yusefu picture yusefu  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

mattmill30 picture mattmill30  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

mvastola picture mvastola  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

yykamei picture yykamei  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

jeffb-stell picture jeffb-stell  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ