Faraday: Hilfe beim Schreiben von Middleware

Erstellt am 21. Jan. 2014  ·  13Kommentare  ·  Quelle: lostisland/faraday

Aus der Dokumentation scheint mir, dass Folgendes funktionieren sollte. Aber das tut es nicht. Die Dokumentation ist schlecht zum Schreiben von Middleware. Statt dessen kann jemand Hilfestellung leisten.

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

Hilfreichster Kommentar

Ein vollständiges einfaches Beispiel würde für die Dokumentation einen großen Beitrag leisten.

Alle 13 Kommentare

Versuchen Sie es mit conn.use anstelle von conn.request . Es versucht, die MyMiddleware-Middleware in Faraday::Request zu suchen.

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

@technoweenie Wir sollten eine bessere Dokumentation zum Registrieren von Middleware haben. Ich musste es vor kurzem hier tun und musste den Code lesen, um herauszufinden, wie.

@jwaldrip Wenn Sie Ihre Middleware registriert hätten, könnten Sie conn.request sagen.

Wenn Sie Ihre Middleware registriert hätten, könnten Sie conn.request sagen.

Außerdem sollten Sie das Symbol verwenden, mit dem Sie sich registriert haben, nicht den Klassennamen. Die Symbole sind nur als Abkürzung zum Einfügen des vollständigen Klassennamens vorhanden. conn.request(:json) ist im Grunde dasselbe wie Faraday::Request::JSON .

Wir sollten eine bessere Dokumentation für die Registrierung von Middleware haben.

:+1: Ich habe es verschoben, weil ich vorhatte, das Middleware-System komplett zu ändern.

@jwaldrip Stimmt, dass dies eine schlechte Benutzererfahrung ist. Er hat die Zeile, die die Middleware unter einer Symbolkürzel registriert, auskommentiert, verwendet aber weiterhin den conn.request Setter, der meiner Meinung nach nur mit Symbolkürzeln funktioniert. Daher konnte die Middleware nicht gefunden werden.

Wir sollten uns überlegen, wie wir das verbessern können, oder zumindest eine bessere Fehlermeldung haben.

Ich habe es zum Laufen gebracht, hat einige Zeit gedauert. Lassen Sie mich wissen, ob ich bei der Dokumentation oder der Überarbeitung der Middleware überhaupt helfen kann.

Wie sah dein finales Setup aus? @jwaldrip

Wurde darüber jemals etwas geschrieben? Ich konnte nichts Nützliches finden und musste mir ein paar Minuten den Kopf schlagen, um es herauszufinden.

@stefansedich bin mir nicht sicher, ob es nach dieser Diskussion eine direkte Folgemaßnahme oder Verbesserung gab, aber wir planen, zusammen mit der nächsten Hauptversion (1.0) einige schwere Arbeiten an der Dokumentation zu machen, also wird dies hoffentlich in Zukunft kein Problem sein wieder.

Wäre toll, wenn jemand in dieser Ausgabe jetzt posten würde, wie die Registrierung genau aussieht.

@maxim Wir haben jetzt eine offizielle Website mit einigen Dokumentationen rund um Middleware , die jedoch noch verbessert wird.

Kurz gesagt, request und response sollten nur für registrierte Middleware verwendet werden, wenn Sie eine benutzerdefinierte einschleusen müssen, rufen Sie einfach .use .
Im obigen Beispiel würde also Folgendes funktionieren:

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

Ein vollständiges einfaches Beispiel würde für die Dokumentation einen großen Beitrag leisten.

@maxim Wir haben jetzt eine offizielle Website mit einigen Dokumentationen rund um Middleware, die jedoch immer noch verbessert wird.

Kurz gesagt, Request und Response sollten nur für registrierte Middleware verwendet werden, wenn Sie eine benutzerdefinierte einschleusen müssen, rufen Sie einfach .use auf.
Im obigen Beispiel würde also Folgendes funktionieren:

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

@iMacTia Das steht nicht in der Dokumentation, aber es ist wichtig. Vielleicht könnte es in https://lostisland.github.io/faraday/middleware/custom sein

@wilsonsilva du hast vollkommen recht, das wäre auf jeden Fall eine gute Verbesserung 😅. Ich bin überrascht, dass es verpasst wurde, um fair zu sein

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

mokolabs picture mokolabs  ·  3Kommentare

jedeleh picture jedeleh  ·  3Kommentare

mattmill30 picture mattmill30  ·  4Kommentare

jordansissel picture jordansissel  ·  5Kommentare

amrrbakry picture amrrbakry  ·  4Kommentare