Ich habe einen Webdienst, der JSON-Parameter akzeptiert und bestimmte URLs für Methoden hat, z.
http://IP:PORT/API/getAllData?p={JSON}
Dies ist definitiv kein REST, da es nicht staatenlos ist. Es berücksichtigt Cookies und hat eine eigene Sitzung.
Ist es RPC? Was ist der Unterschied zwischen RPC und REST?
web-services
rest
rpc
Mazmart
quelle
quelle
Antworten:
Sie können keine klare Trennung zwischen REST und RPC vornehmen, indem Sie sich nur ansehen, was Sie gepostet haben.
Eine Einschränkung von REST ist, dass es zustandslos sein muss. Wenn Sie eine Sitzung haben, haben Sie den Status, sodass Sie Ihren Dienst nicht RESTful aufrufen können.
Die Tatsache, dass Ihre URL eine Aktion enthält (dh
getAllData
), ist ein Hinweis auf RPC. In REST tauschen Sie Repräsentationen aus und die von Ihnen ausgeführte Operation wird von den HTTP-Verben bestimmt. Außerdem wird in REST die Inhaltsverhandlung nicht mit a durchgeführt?p={JSON}
Parameter durchgeführt.Ich weiß nicht, ob Ihr Dienst RPC ist, aber er ist nicht RESTful. Sie können den Unterschied online erfahren. Hier ist ein Artikel, der Ihnen den Einstieg erleichtert : Entlarven der Mythen von RPC & REST . Sie wissen besser, was in Ihrem Service enthalten ist. Vergleichen Sie also die Funktionen mit denen von RPC und ziehen Sie Ihre eigenen Schlussfolgerungen.
quelle
Betrachten Sie das folgende Beispiel für HTTP-APIs, mit denen Bestellungen in einem Restaurant modelliert werden.
Eine Bestellung aufgeben:
Bestellung abrufen:
Aktualisieren einer Bestellung:
Beispiel aus sites.google.com/site/wagingguerillasoftware/rest-series/what-is-restful-rest-vs-rpc
quelle
Wie andere gesagt haben, besteht ein wesentlicher Unterschied darin, dass REST nomenzentriert und RPC verbzentriert ist. Ich wollte nur diese übersichtliche Tabelle mit Beispielen einfügen, die Folgendes demonstrieren:
Anmerkungen
(z. B.
GET /persons/1234
), während RPC in der Regel Abfrageparameter für Funktionseingaben verwendet(z
GET /readPerson?personid=1234
. B. ).GET /persons?height=tall
. B. ) umfasst.POST /signup
oderPOST /persons
Daten einschließen, die die neue Person beschreiben).quelle
Es ist RPC mit http . Eine korrekte Implementierung von REST sollte sich von RPC unterscheiden. Eine Logik zum Verarbeiten von Daten wie eine Methode / Funktion zu haben, ist RPC. getAllData () ist eine intelligente Methode. REST kann keine Intelligenz haben, es sollten Speicherauszugsdaten sein, die von einer externen Intelligenz abgefragt werden können .
Die meisten Implementierungen, die ich heutzutage gesehen habe, sind RPC, aber viele nennen es fälschlicherweise REST. REST mit HTTP ist der Retter und SOAP mit XML der Bösewicht. Ihre Verwirrung ist also berechtigt und Sie haben Recht, es ist nicht REST.
Das HTTP-Protokoll führt keine Implementierung von REST durch. Sowohl REST (GET, POST, PUT, PATCH, DELETE) als auch RPC (GET + POST) können über HTTP entwickelt werden (z. B. über ein Web-API-Projekt in Visual Studio).
Gut, aber was ist dann REST? Das Richardson-Reifegradmodell ist unten angegeben (zusammengefasst). Nur Level 3 ist RESTful.
zB: Stufe 3 (HATEOAS):
Der Link gibt an, dass dieses Objekt auf diese Weise aktualisiert und auf diese Weise hinzugefügt werden kann.
Link gibt an, dass dieses Objekt nur gelesen werden kann und so machen wir es.
Das Senden von Daten reicht natürlich nicht aus, um REST zu werden, aber es sollte auch erwähnt werden, wie die Daten abgefragt werden. Aber warum die 4 Schritte? Warum kann es nicht nur Schritt 4 sein und es REST nennen? Richardson hat uns nur einen schrittweisen Ansatz gegeben, um dorthin zu gelangen, das ist alles.
PS: REST ist sehr beliebt, ebenso wie automatisierte Tests, aber wenn es um Beispiele aus der Praxis geht.
quelle
REST lässt sich am besten für die Arbeit mit den Ressourcen beschreiben, wobei es bei RPC mehr um die Aktionen geht.
REST steht für Representational State Transfer. Es ist eine einfache Möglichkeit, Interaktionen zwischen unabhängigen Systemen zu organisieren. RESTful-Anwendungen verwenden normalerweise HTTP-Anforderungen, um Daten zu veröffentlichen (zu erstellen und / oder zu aktualisieren), Daten zu lesen (z. B. Abfragen zu stellen) und Daten zu löschen. Somit kann REST HTTP für alle vier CRUD-Vorgänge (Erstellen / Lesen / Aktualisieren / Löschen) verwenden.
RPC wird im Wesentlichen zur Kommunikation zwischen den verschiedenen Modulen verwendet, um Benutzeranforderungen zu erfüllen. zB In Openstack wie Nova, Blick und Neutron beim Booten einer virtuellen Maschine zusammenarbeiten.
quelle
Ich würde so argumentieren:
Besitzt / besitzt meine Entität die Daten? Dann RPC: Hier ist eine Kopie einiger meiner Daten. Bearbeiten Sie die Datenkopie, die ich Ihnen sende, und senden Sie mir eine Kopie Ihres Ergebnisses zurück.
Besitzt / besitzt die angerufene Entität die Daten? Dann REST: entweder (1) zeige mir eine Kopie einiger deiner Daten oder (2) manipuliere einige deiner Daten.
Letztendlich geht es darum, welche "Seite" der Aktion die Daten besitzt / hält. Und ja, Sie können REST-Wörter verwenden, um mit einem RPC-basierten System zu sprechen, aber Sie werden trotzdem RPC-Aktivitäten ausführen, wenn Sie dies tun.
Beispiel 1: Ich habe ein Objekt, das über ein DAO mit einem relationalen Datenbankspeicher (oder einem anderen Datenspeichertyp) kommuniziert. Es ist sinnvoll, den REST-Stil für diese Interaktion zwischen meinem Objekt und dem Datenzugriffsobjekt zu verwenden, das als API vorhanden sein kann. Meine Entität besitzt / hält die Daten nicht, die relationale Datenbank (oder der nicht relationale Datenspeicher).
Beispiel 2: Ich muss viel komplexe Mathematik machen. Ich möchte nicht eine Reihe von mathematischen Methoden in mein Objekt laden, sondern nur einige Werte an etwas anderes übergeben, das alle Arten von Mathematik ausführen kann, und ein Ergebnis erhalten. Dann ist der RPC-Stil sinnvoll, da das mathematische Objekt / die mathematische Entität meinem Objekt eine ganze Reihe von Operationen zur Verfügung stellt. Beachten Sie, dass diese Methoden möglicherweise alle als einzelne APIs verfügbar gemacht werden und ich sie mit GET aufrufen kann. Ich kann sogar behaupten, dass dies RESTful ist, weil ich über HTTP GET anrufe, aber wirklich unter dem Deckmantel ist es RPC. Meine Entität besitzt / hält die Daten, die entfernte Entität führt nur Manipulationen an den Kopien der Daten durch, die ich an sie gesendet habe.
quelle
Über HTTP sind beide nur
HttpRequest
Objekte und erwarten beide einHttpResponse
Objekt zurück. Ich denke, man kann mit dieser Beschreibung weiter codieren und sich um etwas anderes kümmern.quelle
Hier gibt es viele gute Antworten. Ich würde Sie trotzdem auf diesen Google-Blog verweisen, da er die Unterschiede zwischen RPC und REST sehr gut diskutiert und etwas erfasst, das ich in keiner der Antworten hier gelesen habe.
Ich würde einen Absatz aus demselben Link zitieren, der mir aufgefallen ist:
quelle
So verstehe und verwende ich sie in verschiedenen Anwendungsfällen:
Beispiel: Restaurantmanagement
Anwendungsfall für REST : Auftragsverwaltung
Für das Ressourcenmanagement ist REST sauber. Ein Endpunkt mit vordefinierten Aktionen. Es kann eine Möglichkeit gesehen werden, eine DB (SQL oder NoSQL) oder Klasseninstanzen der Welt zugänglich zu machen.
Implementierungsbeispiel:
Framework-Beispiel: Falcon für Python.
Anwendungsfall für RPC : Operations Management
Für analytische, betriebliche, nicht reagierende, nicht repräsentative, handlungsbasierte Jobs funktioniert RPC besser und es ist sehr natürlich, funktional zu denken.
Implementierungsbeispiel:
Framework-Beispiel: Flasche für Python
quelle