Metoda PUT

Metoda PUT

Metoda PUT służy do zachowania obiektu przekazywanego w treści zapytania pod wskazanym adresem URL.

  • W przypadku gdy pod tym adresem istniał już zasób, powinien on zostać nadpisany. Zwracany jest wtedy rezultat 200 (OK) lub 204 (No Content), gdy nastąpiło nadpisanie pustym zbiorem.
  • Jeżeli zasób nie istniał, to powinien zostać utworzony pod podanym adresem. Zwracany jest wtedy rezultat 201 (Created)
    PUT /article/1234 HTTP/1.1
PUT /article/1234 HTTP/1.1
{ "color": "red" }

Gdy metoda PUT zakończy się powodzeniem, wykonanie metody GET dla tego samego adresu powinno zwrócić dokładnie ten sam obiekt jaki był użyty w PUT. Oczywiście tylko wtedy, gdy zasób ten nie został zmodyfikowany w międzyczasie. Warto też wspomnieć, że metoda PUT jest idempotentna, a więc wielokrotne jej wykonanie powinno przynieść identyczny rezultat.

PUTFormat treści zapytania PUT powinien być zgodny z typem wiadomości zwracanej przez metodę GET. W odpowiedzi serwer może wysłać nagłówki walidacyjne takie jak ETag i Last-Modified, jeżeli wartość zasobu jest identyczna z wartością wysłaną. PUT może także modyfikować dodatkowe zasoby poza wskazanym adresem, aby na przykład uaktualnić relacje między zasobami.

Różnice pomiędzy PUT i POST

Istnieje kilka podstawowych różnic pomiędzy tymi dwoma metodami:

  • Treść zapytania POST może mieć dowolna formę, którą serwer potrafi zinterpretować, podczas gdy w metodzie PUT treść powinna być taka sama jak treść modyfikowanego zasobu.
  • Metoda PUT jest idempotentna, ponieważ dotyczy tylko zasobu o konkretnym adresie, a POST może tworzyć zasoby pod kolejnymi adresami.
  • PUT zakłada znajomość docelowego adresu zasobu, co jest niemożliwe w przypadku wstawiania rekordu, dla którego zostanie wygenerowany numer id. Natomiast w metodzie POST nie podajemy adresu, gdyż jest on generowany po stworzeniu danego zasobu (patrz przykład poniżej).
Request Response
PUT /articles/red-shoe HTTP/1.1
 { name: "shoe", color: "red" }
HTTP/1.1 201 Created
 Location: /articles/red-shoe
Request Response
POST /articles HTTP/1.1
 { name: "shoe", color: "red" }
HTTP/1.1 201 Created
 Location: /articles/63636

Źródła:
http://tools.ietf.org/html/rfc7231#section-4.3.4