Rest: Post, Get, Del


#1

Hi

Bin mir nicht sicher ob der Beitrag richtig kategoriesiert ist - @Moderatoren: vielleicht könnt Ihr den ja in dem Fall umschieben :wink:

Also:
Ich bastel grad n bisschen an einem zukünftigen rest-dienst rum, der 2 Operationen hat: Hin- und Rückkanal.

Also es geht ja immer um (0-n) Parameter(als Einzelwert oder als Baum) hinschieben und ein Resultat zurückbekommen(als Einzelwert oder als Baum)

Jetzt ist die Frage welche HTTP-Befehl(get, post, delete, put…) ich nehmen soll und dachte mir eigentlich, das das völlig egal ist?!

Denke mir aber ich sollte vielleicht “post” nehmen, für Hin und Rückkanal nehmen, weil die Parameter nicht wie “get” im Zweifelsfall abgeschnitten werden.

Ist meine Denke an der Stelle da richtig?

Grüße


#2

Letztendlich kannst du es implementieren wie du willst. Möchtest du aber unter einer URI mehrere Methoden anbieten, dann kann das durchaus auch Nachteile haben, wenn du das nicht richtig machst. Da es sich hierbei um ein API handelt, würde ich das schon versuchen gescheit zu machen. API hinterher zu ändern kann sonst sehr aufwendig werden (Stichwort: Versionierung).

Würde ich wie folgt verwenden:

get - Liefert irgendetwas zurück. Es wird also nichts am Zustand des Servers verändert.
post - Erstellt etwas auf dem Server. Es gibt also in irgendeiner Form eine neue Entität. Diese Methode mehrfach mit den selben Parametern aufzurufen würde somit JEDESMAL ein neues Objekt erstellen.
put - Verändert einen Zustand des Servers (z.B. indem ein Wert geändert wird). Diese methode mehrfach mit den selben Parametern aufzurufen würde also praktisch gesehen nur einmal wirklich eine Änderung vornehmen
Delete - Löscht entsprechend irgendwas vom Server.


#3

Ergänzend: Standardmäßig sollte GET keinen Body haben, also nur über Query- und Pfadparameter funktionieren (auch wenn manchee Webserver auch Body-Content unterstützen). Wenn das z.B. aus Platzgründen nicht ausreicht, sollte man auf POST ausweichen (was sowieso ein bisschen “Mädchen für alles” unter den Methoden ist).