Was RESTful Webservices sind weiß inzwischen wohl nahezu jeder, der sich ein wenig mit dem Thema beschäftigt. Wenn du es nicht weißt, darfst du gerne Wikipedia bemühen oder eine Suchmaschine deiner Wahl, zumindest ist das Thema so oft erklärt, dass ich meinen Senf dazu nicht auch nochmal ablassen muss.
Was einem aber auffällt wenn man mehrere dieser Dokus liest ist, dass sie sehr widersprüchlich bezüglich der Methoden sind und für was sie zuständig sind. Mit einem GET
werden Informationen angefragt – ok. Ein DELETE
wird benutzt um Daten zu löschen, das ist auch noch recht eingängig. Aber wird nun mit POST
ein Element angelegt oder doch mit PUT? Und mit welchem von beiden werden die Daten dann bearbeitet?
Mal komplett abgesehen davon, dass sich diese Themen leider oft doch in der Theorie halten, da viele Server/Proxies ein DELETE
automatisch in ein GET
umwandeln und ein PUT
automatisch in ein POST
hat mich interessiert wie das nun wirklich ist. Nach ewigem Suchen habe ich dann in einem Blog eine einleuchtende Erklärung gefunden. Leider gab es generell viel zu wenige Antworten zu diesem Thema und daher dachte ich, ich füge der Ergebnisliste mal einen Treffer mehr hinzu.
Zäumen wir das Pferd doch mal von hinten auf: Du hast sicherlich schon erlebt, dass wenn du in deinem Browser den Zurück-Button bemüht hast dir dein Browser sagte, dass das vorherige Formular auf POST
-Daten beruht und ob du die Daten noch einmal abschicken willst. Diese Nachfrage beruht nicht nur einfach auf der Freundlichkeit des Browser-Herstellers der dem Server nicht zu viel Arbeit zumuten möchte, sondern die Erklärung liegt in der Antwort unserer Frage:
Nach dem Lehrbuch macht es eben einen Unterschied ob ich einen POST
-Request einmal oder mehrmals abschicke und das Unterscheidet ihn maßgeblich von einem PUT
.
Das heißt: Wenn ich meinem Webservice einen Request schicke mit dem Inhat Erzeuge einen neuen Kunden mit dem Namen „Hans Meier“ und schicke diesen Request zehn Mal, dann habe ich zehn Kunden mit dem Namen Hans Meier angelegt. Sende ich ein Request welches sagt Ändere den Nachnamen des Kunden 4711 auf „Müller“ und ich schicke dieses Request zehn Mal, dann heißt der Kunde mit der Kundennummer mit Nachnamen eben „Müller“, egal wie oft ich das Request abschicke.
Aus diesem Grund kann man nicht so einfach sagen, ob ein PUT
nun das Update ist oder ein POST
das Create, denn wenn ich nun meinen Kunde update, indem ich ihm ein Kind hinzufüge und ich führe dieses Update zehn Mal aus, dann hat er zehn Kinder (der Arme).
Dieses ganze Thema hat natürlich noch einen tollen akademischen Hintergrund und so weiter, aber den dürft ihr euch selbst suchen. Ich hoffe ich konnte euch mit dieser Beschreibung den praktischen Unterschied verdeutlichen und eine kleine Eselsbrücke liefern. Viel Erfolg! 😉