Ist das REST API wirklich RPC? Roy Fielding scheint so zu denken
Einer großen Menge von dem, was ich dachte, ich wusste über REST ist offenbar falsch - und ich bin nicht allein. Diese Frage hat eine lange lead-in, aber es scheint nötig zu sein, da die Informationen etwas verstreut. Die eigentliche Frage kommt am Ende, wenn Sie bereits vertraut mit diesem Thema.
Des ersten Absatzes von Roy Fielding ist REST APIs must be hypertext-drivenes ist ziemlich klar, dass er glaubt, seine Arbeit ist weithin falsch interpretiert:
Ich bin frustriert durch die Anzahl der Menschen, die beim aufrufen einer HTTP-basierten Schnittstelle die REST-API. Das heutige Beispiel ist die SocialSite REST-API. Das ist der RPC. Es schreit RPC. Es gibt so viel-Kopplung auf dem display, dass es gegeben werden sollte, ein X-rating.
Fielding geht auf mehrere Attribute einer REST-API. Einige von Ihnen scheinen zu gehen, sowohl gegen die gängige Praxis und gemeinsamen Beratung auf SO und in anderen Foren. Zum Beispiel:
- Einer REST-API eingegeben werden sollten, die keine Vorherige Kenntnis über die ursprüngliche URI (Lesezeichen) und eine Reihe von Standard-Medien-Typen, die angemessen für die Zielgruppe (d.h. es wird erwartet, dass Sie verstanden werden, von jedem client, die möglicherweise verwenden Sie die API). ...
- Einer REST-API muss nicht fest fixiert Ressourcennamen oder Hierarchien (eine offensichtliche Kopplung von client und server). ...
- Einer REST-API sollte verbringen fast alle Ihre aussagekräftigen Aufwand bei der Festlegung der Medien-Typ(en) für die Darstellung von Ressourcen und Fahrt den Zustand der Anwendung, oder bei der Festlegung verlängerter Bezug von Namen und/oder hypertext-fähigen mark-up für die vorhandenen standard-Medientypen. ...
Die Idee "hypertext" eine zentrale Rolle spielt - viel mehr als URI-Struktur oder welche HTTP-Verben bedeuten. "Hypertext" ist in einem der Kommentare:
Wenn ich [Fielding] sagen, hypertext, ich meine die gleichzeitige Präsentation von Informationen und steuert so, dass die Informationen wird die affordance, durch die der Benutzer (oder der Automat) erhält, Entscheidungen und wählt Aktionen. Hypermedia ist nur eine Erweiterung auf das, was der text bedeutet, gehören zeitliche Anker innerhalb eines media-stream; die meisten Forscher haben fiel die Unterscheidung.
Hypertext muss nicht sein, HTML in einem browser. Maschinen können Folgen Sie den links, wenn Sie verstehen, das Datenformat und die relationship-Typen.
Ich vermute an dieser Stelle, aber die ersten beiden oben genannten Punkte scheinen zu vermuten, dass API-Dokumentation für ein Foo-Ressource, die wie folgt aussieht führt zu einer engen Kopplung zwischen client und server und hat keinen Platz in einer ruhigen system.
GET /foos/{id} # read a Foo
POST /foos/{id} # create a Foo
PUT /foos/{id} # update a Foo
Statt, ein agent sollte gezwungen werden, zu entdecken, die URIs für alle Foos, zum Beispiel durch die Erteilung einer GET-Anfrage an /foos. (Diese URIs stellen Folgen dem Muster oben, aber das ist nebensächlich.) Die Antwort verwendet einen media-Typ, der fähig ist zu vermitteln, wie Sie Zugriff auf jedes Element, und was mit ihm getan werden kann, wodurch der Dritte Punkt von oben. Aus diesem Grund API-Dokumentation sollte der Schwerpunkt auf die Erläuterung Interpretation der hypertext enthalten, die in der Reaktion.
Darüber hinaus jedes mal, wenn ein URI zu einem Foo Ressource angefordert, enthält die Antwort alle notwendigen Informationen für einen Agenten zu entdecken, wie Sie Vorgehen, zum Beispiel durch Zugriff auf die assoziierten und übergeordneten Ressourcen über Ihre URIs, oder die durch Maßnahmen nach erstellen/löschen einer Ressource.
Den Schlüssel zu dem ganzen system ist, dass die Antwort besteht aus hypertext, die in einer Medien-Typ, der sich vermittelt, um die agent-Optionen für den übergang. Es ist nicht anders als der Weg, der ein browser arbeitet für den Menschen.
Aber dies ist nur meine beste Schätzung, in diesem besonderen Augenblick.
Fielding geschrieben, eine follow-upin dem er reagierte auf die Kritik, dass seine Diskussion war zu Abstrakt, fehlt in den Beispielen und jargon-Reich:
Andere werden versuchen zu entziffern, was ich geschrieben habe, in einer Weise, die mehr direkte oder gelten einige praktische Anliegen von heute. Ich wahrscheinlich nicht, weil ich bin zu beschäftigt, die Auseinandersetzung mit dem nächsten Thema, der Vorbereitung für eine Konferenz, ein schreiben von einem anderen standard, unterwegs zu einem Fernen Ort, oder einfach nur tun, die kleinen Dinge, die lassen Sie mich das Gefühl, dass ich verdient habe ich mein Gehalt.
So, zwei einfache Fragen für die REST-Experten gibt, mit einer praktischen Denkweise: wie interpretieren Sie das, was Fielding sagt und wie Sie es in der Praxis bei der Dokumentation/Umsetzung von REST APIs?
Edit: diese Frage ist ein Beispiel dafür, wie schwer es sein kann, etwas zu lernen, wenn Sie nicht über einen Namen für das, was du redest. Der name ist in diesem Fall "Hypermedia as the Engine of Application State" (HATEOAS).
InformationsquelleAutor der Frage Rich Apodaca | 2009-07-22
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich glaube, Ihre Erklärung meist bedeckt. URIs undurchsichtig sind Kennungen, die für die meisten Teil, nicht mitgeteilt werden über die Lesezeichen-URI, der verwendet wird, indem der user-agent, um auf die app zugreifen.
Als die für die Dokumentation, diese Frage wurde getan, schon ein paar mal. Dokumentieren Sie Ihre Medien-Typ, zusammen mit der hyperlink-Steuerelemente, die es enthält (links und Formulare) und die Interaktion Modell, wenn Sie dies wünschen (siehe AtomPub).
Wenn Sie dokumentieren die URIs oder wie Sie zu bauen, Sie tun es falsch.
InformationsquelleAutor der Antwort SerialSeb
Ihre interpretation scheint korrekt zu mir. Ich glaube, dass Fielding von den Zwängen können praktisch angewendet werden.
Ich würde wirklich gerne jemanden sehen, veröffentlichen einige gute Beispiele, wie zum Dokument eine REST-Schnittstelle. Es gibt so viele schlechte Beispiele, haben einige gültige, um Benutzer an, würde sehr wertvoll sein.
InformationsquelleAutor der Antwort Darrel Miller
Bin ich auf der Suche für ein gutes Beispiel für eine API geschrieben, nach dem HATEOAS und hatte Mühe, einen zu finden (ich fand sowohl die SunCloud API und AtomPub Zeug schwer zu gelten für eine "normale" API-situation). Also versuchte ich, was ein realistisches Beispiel auf meinem blog, gefolgt von Roy Fieldings Ratschläge, was es bedeutet, einen richtigen REST-Implementierung. Ich fand es sehr schwierig zu kommen mit dem Beispiel, trotz der Tatsache, dass es ziemlich einfach ist, im Prinzip (nur verwirrend beim arbeiten mit einer API im Gegensatz zu einer Webseite). Ich bekomme, was Roy nahm Problem mit und Stimmen zu, es ist nur eine Verschiebung in der Denkweise, um eine ordnungsgemäße Umsetzung für eine API.
Einen Blick: API Beispiel Verwendung von Rest
InformationsquelleAutor der Antwort jeremyh
Die einzige Ausnahme die Anleitung zu bauen-URIs ist, dass es zulässig ist, zum senden einer URI-Vorlage in der hypertext-Reaktion, mit Feldern ersetzt werden, automatisch durch den client, über andere Felder in den hypertext. Diese in der Regel nicht sparen am Ende viel Bandbreite, da die gzip-Komprimierung behandelt, wiederholt Teile von URIs gut genug, um sich nicht die Mühe mit diesem.
Einige gute Gespräche, die auf die ERHOLUNG und den zugehörigen HATEOAS:
Vorteile Der (Auch) Mit HATEOAS In RESTFul APIs
Wie man eine Tasse Kaffee
InformationsquelleAutor der Antwort aehlke
Für Interessierte, fand ich ein detailliertes Beispiel von HATEOAS in der Praxis in der Sun Cloud-API.
InformationsquelleAutor der Antwort Rich Apodaca
Der Sache, dass die meisten Leute falsch machen ist, dass (glaube ich zumindest) in der ÜBRIGEN Welt, die Sie nicht dokumentieren Sie Ihre "Rest-Schnittstelle", was Sie Dokument ist ein Medien-Typ, unabhängig von Ihrem server oder service.
InformationsquelleAutor der Antwort redben
Absolut richtig. Ich würde beachten Sie zusätzlich, dass das URI-templates sind völlig in Ordnung, innerhalb einer Erholsamen Anwendung so lange, wie die Muster sind aus den Dokumenten vom server empfangen (OpenSearch geeignetes Beispiel). Für URI-templates, die Sie das Dokument, in dem Sie benutzt werden und was erwartet die Platzhalter in der Vorlage sind, aber nicht die Vorlagen selbst. Etwas im Gegensatz zu dem, was Wahnfrieden sagte, dies ist nicht eine Ausnahme.
Beispielsweise bei meiner Arbeit haben wir eine interne domain-management-system, und die service-Dokument gibt zwei URI-templates: eines für die Herstellung eines der besten Vermutung URI für eine Domänen-Ressource, und ein weiteres für den Bau einer URI zum Abfragen die Verfügbarkeit einer domain. Es ist immer noch möglich, durch die Seite Domänen-Sammlung, um herauszufinden, was die URI, die von einer bestimmten Domäne ist, aber angesichts der immensen Anzahl von domains, die er verwaltet, wäre dies nicht machbar sein für die Kunden, indem Sie Ihnen einen Weg, um zu erraten, was der URI eines domain-Ressource sein könnte, ist ein großer Gewinn in Bezug auf die Einfachheit der Durchführung aus der client-Perspektive und Bandbreite des Servers.
Auf Ihre Frage: Unsere normativen Dokumentation ausgesetzt ist, Ressourcen, die Wirkung von verschiedenen Methoden auf die Ressourcen, und die Vertretung von Medien-Typen und Ihre Verwendung schemas, und welche Art von Ressourcen, die URIs in diesen representions zeigen.
Wir gehören auch nicht-normative (informativ) Dokumentation, befestigt es mit einem Haftungsausschluss nicht zu Lesen, zu viel in die URIs im Dokument erwähnt, gibt Beispiele für typische client-server-Interaktionen. Dadurch wird die eher abstrakte normative Dokumentation konkret.
InformationsquelleAutor der Antwort Keith Gaughan
Denke ich über die Anzahl der Jahre, der REST hat es jetzt, die Technologen haben sich mit dem Konzept der Ressource, und was wirklich ist oder ist nicht Erholsam.
Laut Richardson Maturity Model, es gibt 4 Stufen (0-3), die definiert, wie RESTful API, mit 3 also ein wirklich RESTful API, genauso wie Roy Fielding es sein soll.
Ebene 0 ist, wenn Sie eine entry-point-URI - wie SEIFE.
Level 1 bedeutet, dass die API ist in der Lage zu unterscheiden zwischen den verschiedenen Ressourcen, und hat mehr als eine entry-Punkte - riecht immer noch nach der SEIFE.
Stufe 2 ist, wenn Sie die Verwendung von HTTP-Verben - GET, POST, DELETE in Erster Linie. Dies ist die Ebene, auf der REST kommt wirklich ins Bild.
Auf der Ebene 3 beginnen Sie mit hypermedia-Steuerelemente, um Ihre API - wirklich Erholsam.
Vorgeschlagenen links für die weitere Lektüre:
InformationsquelleAutor der Antwort Sampada
Angenommen
GET /foos/createForm
wird aufgerufen, um Formularfelder, die Werte für die bereitgestellt werden muss, wenn wir unterwegs erstellenPOST /foos
. Nun ist diese bestimmte URL ich.e die 1 zu erstellen foos sollte erwähnt werden, innerhalb der die Antwort fürGET /foos/createForm
wie eine submit-Aktion link nach Fielding ' s Satz, richtig ?Was ist dann der Vorteil der Zuordnung der Aktionen zu den bekannten Http-Verben, um Handlungen, "convention over code/config" - Sache ist gelöst.
InformationsquelleAutor der Antwort redzedi