Ich entwerfe eine API für HTTP und frage mich, ob die Verwendung des Befehls HTTP POST, jedoch nur mit URL-Abfrageparametern und ohne Anforderungshauptteil, ein guter Weg ist.
Überlegungen:
- "Gutes Webdesign" erfordert, dass nicht idempotente Aktionen per POST gesendet werden. Dies ist eine nicht idempotente Aktion.
- Es ist einfacher, diese App zu entwickeln und zu debuggen, wenn die Anforderungsparameter in der URL vorhanden sind.
- Die API ist nicht für eine breite Verwendung vorgesehen.
- Es scheint, als würde das Erstellen einer POST-Anfrage ohne Text etwas mehr Arbeit
Content-Length: 0
erfordern , z. B. muss ein Header explizit hinzugefügt werden. - Es scheint mir auch, dass ein POST ohne Body den Erwartungen der meisten Entwickler- und HTTP-Frameworks etwas widerspricht.
Gibt es weitere Fallstricke oder Vorteile beim Senden von Parametern für eine POST-Anforderung über die URL-Abfrage anstelle des Anforderungshauptteils?
Bearbeiten: Der Grund, warum dies in Betracht gezogen wird, ist, dass die Operationen nicht idempotent sind und andere Nebenwirkungen als das Abrufen haben. Siehe die HTTP-Spezifikation :
Insbesondere wurde die Konvention festgelegt, dass die Methoden GET und HEAD NICHT die Bedeutung haben sollten, eine andere Aktion als das Abrufen durchzuführen. Diese Methoden sollten als "sicher" angesehen werden. Auf diese Weise können Benutzeragenten andere Methoden wie POST, PUT und DELETE auf besondere Weise darstellen, sodass der Benutzer darauf aufmerksam gemacht wird, dass eine möglicherweise unsichere Aktion angefordert wird.
...
Methoden können auch die Eigenschaft "Idempotenz" haben, da (abgesehen von Fehler- oder Ablaufproblemen) die Nebenwirkungen von N> 0 identischen Anforderungen dieselben sind wie für eine einzelne Anforderung. Die Methoden GET, HEAD, PUT und DELETE teilen diese Eigenschaft. Außerdem sollten die Methoden OPTIONS und TRACE KEINE Nebenwirkungen haben und sind daher von Natur aus idempotent.