2017-03-17 6 views
1

Ich möchte das Verwendungsszenario von POST vs PUT in einer WebAPI kennen. Ich kenne die grundlegenden Konzepte, die POST zum Erstellen von Ressourcen und PUT ist zum Aktualisieren von Ressourcen, aber nicht in der Lage zu verstehen, warum wir einen PUT über einen POST benötigen.HTTP-Verben, WebAPI

Ich habe 2 WebAPI Methoden, die/updates Daten zu meinem SQL Speicher 1. AngelegtVon (UserDto) 2. Updateuser (UserDto)

UserDto enthält userId, Benutzernamen und E-Mail erstellt.

Ich kann POST für beide CreateUser und UpdateUser Methoden verwenden, die Benutzer zu meinem Speicher erstellt und aktualisiert.

Was ist dann der wirkliche Vorteil der Verwendung von POST für CreateUser und PUT für updateuser? Ist es nur ein Standard/Konvention?

Danke

+1

Der Unterschied ist, dass PUT von Entwurf * idempotent * ist. Weitere Informationen finden Sie in diesem Tag: http://stackoverflow.com/questions/tagged/idempotent+put –

+0

Und wenn PUT idempotent von Entwurf ist, ist es, da laut HTTP-Spezifikationen sein URI der Bezeichner des Objekts ist, das erstellt werden soll oder aktualisiert (im Gegensatz zu POST). –

+0

Mögliches Duplikat von * vielen * Fragen: http://stackoverflow.com/questions/tagged/post+put+rest –

Antwort

0

POST schafft immer etwas Neues. PUT aktualisiert eine bestehende Sache. Es ist eine Konvention.

sollten Sie haben:

POST/Benutzer: einen neuen Benutzer zu erstellen. Die Nutzlast sollte nicht die ID

PUT/user/(id) enthalten, um ein Benutzer-DTO durch die Daten in der Nutzlast zu ersetzen. Auch hier sollte die Nutzlast keine Benutzer-ID enthalten.

PATCH/user/(id): um bestimmte Mitglieder des Benutzers zu aktualisieren, aber die ID.

Es ist eine Design-Konvention, wie Software-Design-Muster, um es einfach zu kommunizieren und zu verstehen, wer auch immer die API konsumieren muss.

+1

"POST erstellt immer etwas Neues": nicht unbedingt (z. B. wenn die Nutzlast die ID enthält). Es hängt von der API ab (im Gegensatz zu PUT, die immer idempotent ist, weil die ID des Objekts die URI ist). –

+0

Sollte das nicht ein HTTP 409 verursachen? http://stackoverflow.com/questions/3825990/http-response-code-for-post-when-resource-ready-exists – vtortola

+0

Senden eines 409-Code kann in der Tat eine Möglichkeit, Idempotenz zu implementieren. Auf diese Weise "die Nebenwirkungen [in der Filiale] von N> 0 identische Anfragen sind die gleichen wie für eine einzelne Anfrage". –

0

POST wird normalerweise verwendet, um eine neue Ressource zur Sammlung von Ressourcen hinzuzufügen. Gefällt mir: POST /users. Dieser Vorgang ist NICHT idempotent und hat bei jedem Anruf einen Nebeneffekt.

Während PUT ist in der Regel mit einem Ersatz Semantik verwendet und Sie wissen, die genaue Ressource, die Sie ersetzen möchten. Gefällt mir: PUT /users/1. Diese Operation ist idempotent und hat keine Auswirkungen auf nachfolgende Aufrufe.