Jaka jest różnica między PUT, POST i PATCH? [Zamknięte]


281

Jaka jest różnica między metodami PUT, POST i PATCH w protokole HTTP?




12
Używanie czegokolwiek innego niż GET / POST jest szalone w nowoczesnych internetowych interfejsach API. Zbyt wielu to robi. Identyfikatory URI zidentyfikowane w większości nowoczesnych aplikacji NIE SĄ zasobami, które należy wymienić, zaktualizować itp. Nie są to dokumenty. Są nazywane PROCEDURAMI. Sam identyfikator URI rzadko identyfikuje rzeczywisty zasób inny niż wywoływana metoda. Dlatego używaj GET do kwerendowych żądań i testów POST, gdy musisz opublikować dane JSON lub pliki w treści żądania. IMO, wszystko inne próbuje przekształcić przestarzałe koncepcje dotyczące URI i operacji na statycznych dokumentach HTML w nową architekturę, która nie wygląda tak.
Triynko

1
Wszystkie świetne odpowiedzi. Chciałem tylko podzielić się swoją odpowiedzią na temat różnic i kiedy powinieneś użyć każdej z nich.
Trenuj

@Triynko Procedury, o których mówisz, obejmują tworzenie , usuwanie i modyfikację zasobów. Nie ma lepszego sposobu na przekazanie takich pomysłów niż RESTful. Dlaczego nie?
Константин Ван

Odpowiedzi:


200

Różnica między PUT, POST, GET, DELETE i PATCH IN Czasowniki HTTP:

Najczęściej używane czasowniki HTTP POST, GET, PUT, DELETE są podobne do operacji CRUD (tworzenie, odczyt, aktualizacja i usuwanie) w bazie danych. Możemy określić te czasowniki HTTP w kapitale sprawy. Poniżej znajduje się porównanie między nimi.

  1. Utwórz - POST
  2. czytaj - GET
  3. aktualizacja - PUT
  4. usuń - USUŃ

PATCH: Przekazuje częściową modyfikację zasobu. Jeśli musisz zaktualizować tylko jedno pole dla zasobu, możesz użyć metody PATCH.

Uwaga:
Ponieważ POST, PUT, DELETE modyfikuje zawartość, testy z Fiddler dla poniższego adresu URL naśladują aktualizacje. Nie usuwa ani nie modyfikuje. Możemy po prostu zobaczyć kody stanu, aby sprawdzić, czy występują wstawienia, aktualizacje i usunięcia.

URL: http://jsonplaceholder.typicode.com/posts/

1) POBIERZ:

GET jest najprostszym rodzajem metody żądania HTTP; ten, którego używają przeglądarki za każdym razem, gdy klikasz link lub wpisujesz adres URL w pasku adresu. Instruuje serwer, aby przekazał dane określone przez adres URL do klienta. Dane nigdy nie powinny być modyfikowane po stronie serwera w wyniku żądania GET. W tym sensie żądanie GET jest tylko do odczytu.

Sprawdzanie za pomocą Fiddlera lub PostMan: Możemy użyć Fiddlera do sprawdzenia odpowiedzi. Otwórz Skrzypek i wybierz kartę Utwórz. Podaj czasownik i adres URL, jak pokazano poniżej, i kliknij przycisk Wykonaj, aby sprawdzić odpowiedź.

Czasownik: GET

URL: http://jsonplaceholder.typicode.com/posts/

Odpowiedź: Otrzymasz odpowiedź jako:

„userId”: 1, „id”: 1, „title”: „sunt aut ...”, „body”: „quia et suscipit ...”

W ścieżce „happy” (lub bez błędu) GET zwraca reprezentację w XML lub JSON i kod odpowiedzi HTTP o wartości 200 (OK). W przypadku błędu najczęściej zwraca wartość 404 (NIE ZNALEZIONO) lub 400 (ZŁE WNIOSEK).

2) POST:

Czasownik POST jest najczęściej wykorzystywany do tworzenia nowych zasobów. W szczególności służy do tworzenia podrzędnych zasobów. Oznacza to, że podporządkowany jest innemu zasobowi (np. Rodzicowi).

Po pomyślnym utworzeniu zwróć stan HTTP 201, zwracając nagłówek lokalizacji z łączem do nowo utworzonego zasobu o stanie 201 HTTP.

Sprawdzanie za pomocą Fiddlera lub PostMan: Możemy użyć Fiddlera do sprawdzenia odpowiedzi. Otwórz Skrzypek i wybierz kartę Utwórz. Podaj czasownik i adres URL, jak pokazano poniżej, i kliknij przycisk Wykonaj, aby sprawdzić odpowiedź.

Czasownik: POST

URL: http://jsonplaceholder.typicode.com/posts/

Żądanie treści:

data: {title: „foo”, body: „bar”, userId: 1000, Id: 1000}

Odpowiedź: Otrzymasz kod odpowiedzi jako 201.

Jeśli chcemy sprawdzić wstawiony rekord o Id = 1000, zmień czasownik na Get i użyj tego samego adresu URL i kliknij Wykonaj.

Jak wspomniano wcześniej, powyższy adres URL pozwala tylko na odczyt (GET), nie możemy odczytać zaktualizowanych danych w rzeczywistości.

3) PUT:

PUT jest najczęściej wykorzystywany do aktualizacji , PUT do znanego identyfikatora URI zasobu z treścią żądania zawierającą nowo zaktualizowaną reprezentację oryginalnego zasobu.

Sprawdzanie za pomocą Fiddlera lub PostMan: Możemy użyć Fiddlera do sprawdzenia odpowiedzi. Otwórz Skrzypek i wybierz kartę Utwórz. Podaj czasownik i adres URL, jak pokazano poniżej, i kliknij przycisk Wykonaj, aby sprawdzić odpowiedź.

Czasownik: PUT

URL: http://jsonplaceholder.typicode.com/posts/1

Żądanie treści:

data: {title: „foo”, body: „bar”, userId: 1, Id: 1}

Odpowiedź: Po udanej aktualizacji zwraca 200 (lub 204, jeśli nie zwraca treści w treści) z PUT.

4) USUŃ:

DELETE jest dość łatwe do zrozumienia. Służy do usuwania zasobu identyfikowanego przez URI.

Po pomyślnym usunięciu zwróć status HTTP 200 (OK) wraz z treścią odpowiedzi, być może reprezentacją usuniętego elementu (często wymaga zbyt dużej przepustowości) lub opakowaną odpowiedzią (patrz Zwracane wartości poniżej). Albo to, albo zwróć status HTTP 204 (BRAK TREŚCI) bez treści odpowiedzi. Innymi słowy, zalecany jest status 204 bez treści lub odpowiedź w stylu JSEND i status HTTP 200.

Sprawdzanie za pomocą Fiddlera lub PostMan: Możemy użyć Fiddlera do sprawdzenia odpowiedzi. Otwórz Skrzypek i wybierz kartę Utwórz. Podaj czasownik i adres URL, jak pokazano poniżej, i kliknij przycisk Wykonaj, aby sprawdzić odpowiedź.

Czasownik: USUŃ

URL: http://jsonplaceholder.typicode.com/posts/1

Odpowiedź: Po pomyślnym usunięciu zwraca status HTTP 200 (OK) wraz z treścią odpowiedzi.

Przykład między PUT a PATCH

POŁOŻYĆ

Gdybym musiał zmienić imię, wyślij żądanie PUT o aktualizację:

{„first”: „Nazmul”, „last”: „hasan”} Tak więc tutaj, aby zaktualizować imię, musimy ponownie wysłać wszystkie parametry danych.

ŁATA:

Żądanie poprawki mówi, że wyślemy tylko dane, które musimy zmodyfikować, bez modyfikowania lub wpływania na inne części danych. Np .: jeśli musimy zaktualizować tylko imię, przekazujemy tylko imię.

Więcej informacji można znaleźć poniżej:

https://jsonplaceholder.typicode.com/

https://github.com/typicode/jsonplaceholder#how-to

Jaka jest główna różnica między PATCH a PUT?

http://www.restapitutorial.com/lessons/httpmethods.html


62
PUT nie jest aktualizowany. PUT tworzy lub zamienia encję przy danym URI. Zgodnie ze specyfikacją HTTP PUT jest idempotentny. Tak, można go użyć do aktualizacji, ale myślenie tylko o tym, że aktualizacja jest nieprawidłowa.
Maladon

2
Zgadzam się, że PUT nie jest aktualizowany, można go zmapować za pomocą zamiany, ponieważ podczas wysyłania PUT zastępuje istniejący zasób. Ale jeśli wyślemy PATCH, zastąpi to tylko określone wpisy.
Atul Chavan

1
Ponieważ PUT można również wykorzystać do tworzenia, nie jestem pewien, jak twoja odpowiedź wskazuje, którego powinienem użyć?
Rob P.

1
Ta odpowiedź jest znacznie lepsza, ale nie
pasuje do


11

Poniższa definicja pochodzi z prawdziwego przykładu.

Przykład Przegląd
Dla każdego danych klienta przechowujemy identyfikator, aby znaleźć dane klienta i odeślemy ten identyfikator do tego klienta w celach informacyjnych.

  1. POCZTA

    • Jeśli klient wysyła dane bez żadnego identyfikatora przy użyciu metody POST, będziemy je przechowywać i przypisać nowy identyfikator.
    • Jeśli klient ponownie wyśle ​​te same dane bez żadnego identyfikatora przy użyciu metody POST, wówczas będziemy je przechowywać i przypisać nowy identyfikator.
    • Uwaga : kopiowanie jest tutaj dozwolone
  2. POŁOŻYĆ

    • Jeśli klient wysyła dane z identyfikatorem, sprawdzimy, czy ten identyfikator istnieje. Jeśli identyfikator istnieje, zaktualizujemy dane, w przeciwnym razie utworzymy go i przypiszemy nowy identyfikator.
  3. ŁATA

    • Jeśli klient wysyła dane z identyfikatorem, sprawdzimy, czy ten identyfikator istnieje. Jeśli identyfikator istnieje, zaktualizujemy dane, w przeciwnym razie zgłosimy wyjątek.

Uwaga: W metodzie Put nie zgłaszamy wyjątku, jeśli nie znaleziono identyfikatora. Ale w metodzie Patch zgłaszamy wyjątek, jeśli identyfikator nie zostanie znaleziony.

Daj mi znać, jeśli masz jakieś pytania dotyczące powyższego.


8

Typy zapytań

  • Utwórz - POST
  • czytaj - GET
  • utwórz lub zaktualizuj - PUT
  • usuń - USUŃ
  • aktualizacja - PATCH

GET / PUT jest idempotentny PATCH może być czasem idempotentny

Co jest idempotentne - oznacza to, że jeśli uruchomimy kwerendę wiele razy, nie powinna ona wpływać na jej wynik. (Ta sama wydajność. Załóżmy, że krowa jest w ciąży, a jeśli ponownie ją wyhodujemy, to nie może być wielokrotnie ciąża)

get : -

po prostu weź. Pobierz dane z serwera i pokaż je użytkownikowi

{
id:1
name:parth
email:x@x.com
}

post : -

utwórz nowy zasób w bazie danych. Oznacza to, że dodaje nowe dane. To nie jest idempotentne.

put : -

Utwórz nowy zasób, w przeciwnym razie dodaj do istniejącego. Idempotent, ponieważ za każdym razem będzie aktualizować ten sam zasób, a dane wyjściowe będą takie same. dawny. - Wstępne dane

{
id:1
name:parth
email:x@x.com
}
  • wykonaj put-localhost / 1 put email: ppp@ppp.com
{
id:1
email:ppp@ppp.com
}

patch

więc teraz pojawiło się żądanie łatki PATCH może czasem być idempotentny

id:1
name:parth
email:x@x.com
}

nazwa łatki: w

{
id:1
name:w
email:x@x.com
}
Metoda HTTP
POBIERZ tak
POST nr
PUT tak
PATCH nr *
OPCJE tak
GŁOWA tak
USUŃ tak

Zasoby: Idempotent - Co to jest Idempotencja?


Co tak naprawdę oznacza „czasami” idempotent? Co decyduje o idempotencji?
Polv

7

oto prosty opis wszystkich:

  • POST służy zawsze do tworzenia zasobu (nie ma znaczenia, czy został zduplikowany)
  • PUT służy do sprawdzania, czy zasób istnieje, następnie aktualizuj, w przeciwnym razie utwórz nowy zasób
  • PATCH służy zawsze do aktualizacji zasobu

5

Główna różnica między zleceniami PUT i PATCH :

Załóżmy, że mamy zasób, który zawiera imię i nazwisko osoby.

Jeśli chcemy zmienić imię, wysyłamy prośbę o wprowadzenie aktualizacji

{ "first": "Michael", "last": "Angelo" }

Tutaj, chociaż zmieniamy tylko imię, z prośbą PUT musimy wysłać oba parametry najpierw i na końcu.
Innymi słowy, obowiązkowe jest ponowne przesłanie wszystkich wartości, czyli pełnego ładunku.

Gdy wysyłamy żądanie PATCH, wysyłamy jednak tylko dane, które chcemy zaktualizować. Innymi słowy, wysyłamy tylko imię do aktualizacji, bez konieczności wysyłania nazwiska.


2

Całkiem logiczna różnica między PUT i PATCH wrt wysyłanie pełnych i częściowych danych odpowiednio do zamiany / aktualizacji. Jednak tylko kilka punktów jak poniżej

  1. Czasami POST jest traktowany jak dla aktualizacji wr PUT do tworzenia
  2. Czy HTTP nakazuje / sprawdza wysyłanie pełnych vs. częściowych danych w PATCH? W przeciwnym razie PATCH może być zupełnie taki sam jak aktualizacja jak w PUT / POST

2

Pomyśl o tym w ten sposób ...

POST - utwórz

PUT - wymienić

PATCH - aktualizacja

GET - czytaj

USUŃ - usuń


2
Prawdopodobnie dodałbym to rozróżnienie : „ PUT, jeśli klient ustali adres wynikowego zasobu, POST, jeśli serwer to zrobi
ruffin

1

Najprostsze objaśnienie:

POST - Utwórz NOWY rekord

PUT - Jeśli rekord istnieje, zaktualizuj inny, utwórz nowy rekord

PATCH - aktualizacja

GET - czytaj

USUŃ - usuń


Czym różni się to znacznie od odpowiedzi Kwame opublikowanej około dwa tygodnie wcześniej?
ruffin
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.