Faraday: Bantu menulis middleware

Dibuat pada 21 Jan 2014  ·  13Komentar  ·  Sumber: lostisland/faraday

Menurut saya dari dokumentasi bahwa yang berikut ini harus berfungsi. Tapi tidak. Dokumennya buruk untuk menulis middleware. Sebagai gantinya, seseorang dapat meminjamkan bantuan.

# 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>'

Komentar yang paling membantu

Contoh sederhana yang lengkap akan sangat membantu untuk dokumentasi.

Semua 13 komentar

Coba conn.use alih-alih conn.request . Itu mencoba mencari middleware MyMiddleware di Faraday::Request.

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

@technoweenie Kita harus memiliki dokumentasi yang lebih baik tentang cara mendaftar middleware. Saya baru-baru ini harus melakukannya di sini dan harus membaca kode untuk mengetahui caranya.

@jwaldrip Jika Anda telah mendaftarkan middleware Anda, Anda akan dapat mengatakan conn.request .

Jika Anda telah mendaftarkan middleware Anda, Anda akan dapat mengatakan conn.request.

Juga, Anda harus menggunakan simbol yang Anda daftarkan, bukan nama kelas. Simbol hanya ada sebagai jalan pintas untuk memasukkan nama kelas lengkap. conn.request(:json) pada dasarnya sama dengan Faraday::Request::JSON .

Kita harus memiliki dokumentasi yang lebih baik tentang cara mendaftar middleware.

:+1: Saya membatalkannya karena saya berencana untuk sepenuhnya mengubah sistem middleware.

@jwaldrip Benar bahwa ini adalah pengalaman pengguna yang buruk. Dia mengomentari baris yang mendaftarkan middleware di bawah simbol steno, tetapi terus menggunakan setter conn.request yang menurut saya hanya berfungsi dengan steno simbol. Oleh karena itu middleware tidak dapat ditemukan.

Kita harus berpikir bagaimana memperbaikinya, atau setidaknya memiliki pesan kesalahan yang lebih baik.

Saya membuatnya bekerja, butuh waktu. Beri tahu saya jika saya dapat membantu dengan dokumentasi atau pengerjaan ulang middleware.

Seperti apa tampilan akhir Anda? @jwaldrip

Apakah pernah ada sesuatu yang ditulis di sekitar ini? Saya tidak dapat menemukan sesuatu yang berguna dan harus memukul kepala saya selama beberapa menit untuk mengetahuinya.

@stefansedich tidak yakin apakah ada tindak lanjut atau peningkatan langsung setelah diskusi ini, tetapi kami berencana untuk melakukan beberapa pekerjaan berat pada dokumentasi bersama dengan rilis besar berikutnya (1.0) jadi semoga ini tidak menjadi masalah di masa depan lagi.

Akan lebih bagus jika seseorang memposting seperti apa sebenarnya pendaftaran dalam masalah ini untuk saat ini.

@maxim Kami sekarang memiliki situs web resmi dengan beberapa dokumentasi seputar middleware , namun masih berkembang.

Singkatnya, request dan response hanya boleh digunakan untuk middleware terdaftar, jika Anda perlu menyuntikkan yang dibuat khusus lebih mudah untuk memanggil .use .
Jadi dalam contoh di atas, berikut ini akan berfungsi:

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

Contoh sederhana yang lengkap akan sangat membantu untuk dokumentasi.

@maxim Kami sekarang memiliki situs web resmi dengan beberapa dokumentasi seputar middleware, namun masih berkembang.

Singkatnya, permintaan dan respons hanya boleh digunakan untuk middleware terdaftar, jika Anda perlu memasukkan yang dibuat khusus lebih mudah untuk memanggil .use.
Jadi dalam contoh di atas, berikut ini akan berfungsi:

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

@iMacTia Itu tidak ada dalam dokumentasi tetapi ini penting. Mungkin bisa di https://lostisland.github.io/faraday/middleware/custom

@wilsonsilva Anda benar sekali, itu pasti akan menjadi peningkatan yang bagus . Saya terkejut itu dilewatkan untuk bersikap adil

Apakah halaman ini membantu?
0 / 5 - 0 peringkat