Nehmen wir an, ein Dienst bietet eine Funktion, die ich folgendermaßen nutzen kann:
GET /service/function?param1=value1¶m2=value2
Ist es richtig zu sagen, dass ich es mit einer POST-Abfrage verwenden kann?
POST /service/function { param1 : value1, param2 : value2 }
Sind diese beiden Abfragen gleich? Kann ich auf jeden Fall die zweite Variante verwenden oder sollte in der Dokumentation ausdrücklich angegeben werden, dass ich sowohl GET- als auch POST-Abfragen verwenden kann?
GET
undPOST
sollte eine andere Semantik haben, also lautet die allgemeine Antwort vielleicht "Ich hoffe nicht"function
passt nicht gut zusammen. Wenn eine URL enthältfunction
,method
odercommand
, ich rieche RPCPOST
Methode nur zum Aufräumen ist ein Missbrauch,POST
wenn Sie versuchen, den RESTful-Prinzipien zu folgenAntworten:
Sie können
API
using nicht verwendenPOST
oderGET
wenn sie nicht erstellt wurden, um diese Methoden separat aufzurufen. Zum Beispiel, wenn Ihre API sagtwird mit der
GET
Methode zugegriffen . Dann können Sie es nicht mitPOST
method aufrufen, wenn esPOST
vom Ersteller nicht als Methode angegeben wurde . Wenn Sie das tun, erhalten Sie möglicherweise den405 Method not allowed
Status.Im Allgemeinen müssen Sie in der
POST
Methode den Inhalt im Hauptteil mit dem angegebenen Format senden, das beispielsweise in dercontent-type
Kopfzeile beschrieben ist .application/json
für JSON-Daten.Danach wird der Anforderungshauptteil am Serverende deserialisiert. Sie müssen also die serialisierten Daten vom Client übergeben und dies wird vom Serviceentwickler festgelegt.
Im Allgemeinen
GET
wird dies jedoch verwendet, wenn der Server einige Daten an den Client zurückgibt und keine Auswirkungen auf den Server hat, währendPOST
er zum Erstellen einer Ressource auf dem Server verwendet wird. Im Allgemeinen sollte es also nicht dasselbe sein.quelle
content-type
Header validieren ? Was ist, wenn HeaderContent-Type: application/x-www-form-urlencoded
und Inhalt sindJSON
?GET
API nicht so viele Parameter oder JSON-Anforderungen.Nur um zu überprüfen,
REST
hat bestimmte Eigenschaften, die ein Entwickler folgen sollte, um es zu machenRESTful
:Was ist REST?
Laut Wikipedia:
Was die Verben tun sollen
Der SO-Benutzer Daniel Vasallo hat die Verantwortlichkeiten dieser Methoden in der Frage Grundlegendes zu REST: Verben, Fehlercodes und Authentifizierung gut dargelegt :
Um Ihre Frage zu beantworten:
Wenn Sie einen einfachen alten RPC-API-Aufruf schreiben, können diese technisch ausgetauscht werden, solange sich die Seite des Verarbeitungsservers zwischen beiden Aufrufen nicht unterscheidet. Damit der Aufruf jedoch REST-fähig ist, sollte der Aufruf des Endpunkts über die
GET
Methode eine andere Funktionalität (das Abrufen von Ressourcen) als diePOST
Methode (das Erstellen neuer Ressourcen) aufweisen.Randnotiz: Es gibt einige Debatten darüber, ob
POST
auch zum Aktualisieren von Ressourcen verwendet werden darf oder nicht ... obwohl ich das nicht kommentiere, sage ich Ihnen nur, dass einige Leute ein Problem mit diesem Punkt haben.quelle
Ich verwende POST body aus folgenden Gründen für alle nicht trivialen Apps und Branchen-Apps:
Übrigens habe ich auch die Felder, die zurückgegeben werden sollen, in meinen POST-Text eingefügt, da ich meine Feldnamen möglicherweise nicht offenlegen möchte. Sicherheit ist wie eine Zwiebel; es hat viele schichten und bringt uns zum weinen!
quelle
Denk darüber nach. Wenn Ihr Client eine GET-Anforderung an einen URI X sendet, heißt es auf dem Server: "Ich möchte eine Darstellung der Ressource in X, und dieser Vorgang sollte nichts auf dem Server ändern." In einer PUT-Anfrage heißt es: "Ich möchte, dass Sie die bei X befindliche Ressource durch die neue Entität ersetzen, die ich Ihnen im Hauptteil dieser Anfrage gebe." In einer DELETE-Anfrage heißt es: "Ich möchte, dass Sie die bei X befindliche Ressource löschen." Ein PATCH sagt: "Ich gebe Ihnen diesen Unterschied, und Sie sollten versuchen, ihn auf die Ressource bei X anzuwenden und mir zu sagen, ob er erfolgreich ist." Ein POST sagt jedoch: "Ich sende Ihnen diese Daten, die der Ressource bei X untergeordnet sind, und wir haben eine vorherige Vereinbarung darüber getroffen, was Sie damit tun sollen."
Wenn Sie nicht irgendwo dokumentiert haben, dass die Ressource einen POST erwartet und etwas damit macht, ist es nicht sinnvoll, einen POST an ihn zu senden und zu erwarten, dass er sich wie ein GET verhält.
REST basiert auf dem standardisierten Verhalten des zugrunde liegenden Protokolls, und POST ist genau die Methode, die für eine nicht standardisierte Aktion verwendet wird. Das Ergebnis einer GET-, PUT- und DELETE-Anforderung ist im Standard klar definiert, POST jedoch nicht. Das Ergebnis eines POST ist dem Server untergeordnet. Wenn also nicht dokumentiert ist, dass Sie POST verwenden können, um etwas zu tun, müssen Sie davon ausgehen, dass dies nicht möglich ist.
quelle
Es ist schön, dass REST HTTP-Verben (wie sie definiert wurden) Bedeutung verleiht, aber ich stimme Scott Peal lieber zu.
Hier ist auch ein Punkt aus der erweiterten Erklärung von WIKI auf POST-Anfrage :
Ich konnte dem REST-Team nur empfehlen, eine sicherere Verwendung des HTTP-Protokolls in Betracht zu ziehen, um zu vermeiden, dass Verbraucher mit nicht sicheren "bewährten Verfahren" zu kämpfen haben.
quelle
In REST hat jedes HTTP-Verben seinen Platz und seine Bedeutung.
Zum Beispiel,
GET soll die 'Ressource (n)' abrufen, auf die in der URL verwiesen wird.
POST soll das Backend anweisen, eine Ressource des Typs zu erstellen, auf den in der URL verwiesen wird. Sie können die POST-Operation mit Parametern oder zusätzlichen Daten im Hauptteil des POST-Aufrufs ergänzen.
In Ihrem Fall sollte es sich um eine GET-Operation anstelle einer POST-Operation handeln, da Sie daran interessiert sind, die Informationen mithilfe einer Abfrage abzurufen.
Dieses Wiki kann helfen , die Dinge weiter zu klären.
Ich hoffe das hilft!
quelle
Wenn ich die Frage richtig verstehe, muss er eine REST GET-Aktion ausführen, fragt sich jedoch, ob das Senden von Daten über die HTTP-POST-Methode in Ordnung ist.
Wie Scott in seiner Antwort zuvor ausführlich dargelegt hatte, gibt es viele gute Gründe, Eingabedaten zu POSTEN. Meiner Meinung nach sollte dies so erfolgen, wenn die Qualität der Lösung oberste Priorität hat.
Vor einiger Zeit haben wir eine REST-API erstellt, um Benutzer zu authentifizieren, Benutzernamen / Passwort zu verwenden und ein Zugriffstoken zurückzugeben. Die API ist unter TLS verschlüsselt, jedoch dem öffentlichen Internet ausgesetzt. Nachdem wir verschiedene Optionen evaluiert hatten, wählten wir HTTP POST für die REST-Methode "GET Access Token", da dies die einzige Möglichkeit ist, Sicherheitsstandards zu erfüllen.
quelle
POST kann anstelle von GET verwendet werden, wenn Sie bestimmte Gründe dafür haben und es ordnungsgemäß verarbeiten. Ich verstehe, dass es nicht speziell RESTy ist, aber wenn Ihre Daten eine Reihe von Leerzeichen, kaufmännischen Und- und Schrägstrichen usw. enthalten (z. B. ein Produktmodell wie Amazon), kann der Versuch, dies zu codieren und zu decodieren, mehr Probleme bereiten, als es wert ist, anstatt nur vorab jsonifizieren. Stellen Sie jedoch sicher, dass Sie die richtigen Antwortcodes zurückgeben und Ihre Aktivitäten stark kommentieren, da dies kein typischer Anwendungsfall für POST ist.
quelle