Was genau ist RESTful-Programmierung?
Antworten
Zu viele Anzeigen?Wenn ich die ursprüngliche Dissertation über REST auf nur 3 kurze Sätze reduzieren müsste, denke ich, dass der folgende Satz das Wesentliche wiedergibt:
- Ressourcen werden über URLs angefordert.
- Protokolle sind auf das beschränkt, was Sie mit Hilfe von URLs kommunizieren können.
- Metadaten werden als Name-Wert-Paare übergeben (Post-Daten und Query-String-Parameter).
Danach kann man leicht in Debatten über Anpassungen, Kodierungskonventionen und bewährte Verfahren verfallen.
Interessanterweise werden in der Dissertation keine HTTP POST-, GET-, DELETE- oder PUT-Operationen erwähnt. Das muss eine spätere Interpretation der "besten Praxis" für eine "einheitliche Schnittstelle" durch jemanden sein.
Wenn es um Webdienste geht, scheint es, dass wir einen Weg brauchen, um zwischen WSDL- und SOAP-basierten Architekturen zu unterscheiden, die der Schnittstelle einen erheblichen Overhead und wohl auch viel unnötige Komplexität hinzufügen. Außerdem erfordern sie zusätzliche Frameworks und Entwicklertools für die Implementierung. Ich bin mir nicht sicher, ob REST der beste Begriff ist, um zwischen vernünftigen Schnittstellen und übermäßig konstruierten Schnittstellen wie WSDL und SOAP zu unterscheiden. Aber wir brauchen etwas.
REST ist ein architektonisches Muster und ein Stil zur Erstellung verteilter Anwendungen. Es handelt sich nicht um einen Programmierstil im engeren Sinne.
Zu sagen, dass man den REST-Stil verwendet, ist vergleichbar mit der Aussage, dass man ein Haus in einem bestimmten Stil gebaut hat: z. B. Tudor oder viktorianisch. Sowohl REST als Software-Stil als auch Tudor oder viktorianisch als Hausstil können durch die Eigenschaften und Einschränkungen definiert werden, die sie ausmachen. So muss REST beispielsweise eine Client-Server-Trennung aufweisen, bei der die Nachrichten selbstbeschreibend sind. Häuser im Tudor-Stil haben überlappende Giebel und steil geneigte Dächer mit nach vorne gerichteten Giebeln. In Roys Dissertation erfahren Sie mehr über die Einschränkungen und Eigenschaften, die REST ausmachen.
REST hat es im Gegensatz zu Home Styles schwer, konsequent und praktisch angewendet zu werden. Dies mag beabsichtigt gewesen sein. Die tatsächliche Umsetzung bleibt dem Designer überlassen. Es steht Ihnen also frei, zu tun, was Sie wollen, solange Sie die in der Dissertation dargelegten Einschränkungen einhalten, wenn Sie REST-Systeme erstellen.
Bonus:
Das gesamte Web basiert auf REST (oder REST basiert auf dem Web). Als Webentwickler sollten Sie sich dessen bewusst sein, obwohl es nicht notwendig ist, um gute Webanwendungen zu schreiben.
Ich denke, der Sinn von restful ist die Abtrennung der Zustandsabhängigkeit in eine höhere Schicht bei der Nutzung des Internets (Protokoll) als zustandslose Transportschicht . Die meisten anderen Ansätze vermischen die Dinge.
Es ist der beste praktische Ansatz, um die grundlegenden Veränderungen der Programmierung im Internet-Zeitalter zu bewältigen. Was die grundlegenden Veränderungen betrifft, so hat Erik Meijer hier eine Diskussion über die Ausstellung: http://www.infoq.com/interviews/erik-meijer-programming-language-design-effects-purity#view_93197 . Er fasst sie als die fünf Effekte zusammen und präsentiert eine Lösung, indem er die Lösung in einer Programmiersprache entwirft. Die Lösung könnte auch auf der Plattform- oder Systemebene erreicht werden, unabhängig von der Sprache. Restful kann als eine der Lösungen angesehen werden, die in der derzeitigen Praxis sehr erfolgreich ist.
Mit Restful Style können Sie den Zustand der Anwendung über ein unzuverlässiges Internet abrufen und manipulieren. Wenn die aktuelle Operation fehlschlägt, um den korrekten und aktuellen Status zu erhalten, ist das Null-Validierungsprinzip erforderlich, damit die Anwendung fortgesetzt werden kann. Gelingt es ihr nicht, den Zustand zu verändern, verwendet sie in der Regel mehrere Bestätigungsstufen, um die Dinge korrekt zu halten. In diesem Sinne ist Rest selbst keine vollständige Lösung, sondern benötigt die Funktionen in anderen Teilen des Webanwendungs-Stacks, um seine Arbeit zu unterstützen.
Unter diesem Gesichtspunkt ist der Rest-Stil nicht wirklich an das Internet oder die Webanwendung gebunden. Es ist eine grundlegende Lösung für viele Programmiersituationen. Es ist auch nicht einfach, es macht nur die Schnittstelle wirklich einfach, und kommt mit anderen Technologien erstaunlich gut zurecht.
Nur meine 2c.
Edit: Zwei weitere wichtige Aspekte:
-
Staatenlosigkeit ist irreführend. Es geht um die restful API, nicht um die Anwendung oder das System. Das System muss zustandsorientiert sein. Beim restful Design geht es darum, ein zustandsfähiges System auf der Grundlage einer zustandslosen API zu entwerfen. Einige Zitate einer anderen QA :
- REST arbeitet mit Ressourcendarstellungen, die jeweils durch eine URL identifiziert werden. Diese sind in der Regel keine Datenobjekte, sondern komplexe Objekte Abstraktionen .
- REST steht für "Representational State Transfer", d. h. es geht um die Kommunikation und Änderung von der Staat einer bestimmten Ressource in einem System.
- Entdempotenz : Ein oft übersehener Teil von REST ist die Idempotenz der meisten Verben. Das führt zu robuste Systeme und weniger gegenseitige Abhängigkeiten von exakten Interpretationen der Semantik .
Alte Frage, neue Art der Beantwortung. Es gibt eine Menge Missverständnisse über dieses Konzept. Ich versuche immer, mich daran zu erinnern:
- Strukturierte URLs und Http-Methoden/Verbs sind nicht die Definition von ruhevoller Programmierung.
- JSON ist keine aufbauende Programmierung
- RESTful-Programmierung ist nichts für APIs
Ich definiere ruhevolle Programmierung als
Eine Anwendung ist "restful", wenn sie Ressourcen (d. h. die Kombination aus Daten und Steuerelementen für Zustandsübergänge) in einem Medientyp bereitstellt, den der Client versteht.
Um ein ruhevoller Programmierer zu sein, muss man versuchen, Anwendungen zu entwickeln, die es Akteuren ermöglichen, Dinge zu tun. Nicht nur die Datenbank offenlegen.
Zustandsübergangskontrollen sind nur sinnvoll, wenn sich Client und Server auf eine Medientyp-Darstellung der Ressource einigen. Andernfalls gibt es keine Möglichkeit zu wissen, was ein Steuerelement ist und was nicht, und wie man ein Steuerelement ausführt. IE, wenn die Browser nicht wüssten <form>
Tags in Html, dann gäbe es nichts, was Sie in Ihrem Browser in den Übergangszustand überführen könnten.
Ich will keine Eigenwerbung machen, aber ich gehe in meinem Vortrag sehr ausführlich auf diese Ideen ein http://techblog.bodybuilding.com/2016/01/video-what-is-restful-200.html .
Ein Auszug aus meinem Vortrag handelt von dem oft zitierten Richardson Reifegradmodell. Ich glaube nicht an die Stufen, man ist entweder RESTful (Stufe 3) oder nicht, aber was ich daran hervorheben möchte, ist, was jede Stufe für Sie auf dem Weg zu RESTful tut
3 Stimmen
Siehe auch die Antwort unter dem folgenden Link stackoverflow.com/a/37683965/3762855
4 Stimmen
REST ist vielleicht ein bisschen alt geworden ;) youtu.be/WQLzZf34FJ8
1 Stimmen
Weitere Informationen finden Sie unter folgendem Link news.ycombinator.com/item?id=3538585
0 Stimmen
Berichtigungen der akzeptierten Antwort hier. stackoverflow.com/questions/19843480/ Oder hier roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-driven Oder hier web.archive.org/web/20130116005443/http://tomayko.com/writings/
0 Stimmen
Ich möchte nur einen Satz hinzufügen, von dem ich wirklich glaube, dass er viel Bedeutung hat: "Bei REST geht es darum, die Art und Weise, wie das menschliche Web funktioniert, auf das programmatische WEB anzuwenden."
0 Stimmen
RESTful Programmierung (rpc Rahmen) ist eine beliebte, aber nicht beste rpc Rahmen. Http POST und json rpc framework ist besser als REST rpc framework. Welche Methode sollte ich verwenden, wenn ich eine Login-Api hinzufügen möchte? GET?POST? Sollte ich json im POST-Body verwenden oder sollte ich http-Abfrage im POST-Body verwenden? Wie parse ich einen REST-Antwortkörper? Wird der Server json verwenden? Verwendet der Server eine http-Abfrage? REST macht die Dinge nur komplex und nicht konsistent. Ich kann nur POST und json verwenden, um zu tun, was ich will. Ich möchte nicht über GET/POST/DELETE Zeug kümmern.
0 Stimmen
Mark Knol, die Verwendung von Humor oder anderen menschlichen Verhaltensweisen (wie z.B. "Danke" sagen) ist von den Moderatoren, die einen Demutseinlauf erlebt haben, strengstens untersagt.
0 Stimmen
Diese Frage entspricht nicht den Richtlinien von StackOverflow. Sie kann mit einer einfachen Suche beantwortet werden: de.wikipedia.org/wiki/Repräsentative_Zustandsübertragung
9 Stimmen
@OLIVER.KOO Gute Beobachtung. Es ist nur so, dass ich die Frage zu einer Zeit gestellt habe, als das Thema noch recht neu war. Es wurde viel darüber geredet, aber nicht viele Leute wussten, worum es ging. Zumindest wusste ich es nicht, und es scheint, dass meine Frage ihnen geholfen hat, weil sie es auch wissen wollten.