Chciałem tylko dodać coś do zaakceptowanej odpowiedzi, ponieważ jest to zbyt szeroka i bardzo stara odpowiedź.
mam zamiar podkreślić niektóre z najważniejszych bitów w RFC 2616 by W3
mam zamiar zacząć PUT
ponieważ moim zdaniem ma największe zamieszanie otaczającego go.
PUT is used for both create/update PUT updates by completely replacing the resource on the server with the resource sent in the request
Na przykład
dokonać tego połączenia na moim api
PUT /api/person
{
Name: John,
email: [email protected]
}
mój serwer ma tę część dzienną na serwerze
{
Name: Jane,
email: [email protected]
}
Teraz mój istniejący zasób został całkowicie zastąpiony przez to, co wysłałeś i to jest to, co mam na moim serwerze.
{
Name: John,
email: [email protected]
}
Więc jeśli PUT
i tylko wysłać e-mail w organizmie
PUT /api/person
{
email: [email protected]
}
mój serwer będzie całkowicie zastąpić jednostkę
{
Name: Jane,
email: [email protected]
}
Z
{
email: [email protected]
}
i nazwa będzie g jeden. Częściowe aktualizacje są dla PATCH
, ale mimo to używam do tego POST
.
One of the main reasons why we create/update with put is because it is idempotent.
To tylko wyobraźnia termin i podstawowa definicja to jest wielokrotne identyczne wnioski są takie same dla pojedynczego żądania.
Przykład
Przypuśćmy PUT
plik do api/file
jeśli serwer pochodzenie nie okaże się, że plik będzie utworzyć. Jeśli znajdzie plik, całkowicie zastąpi stary plik tym, który wysłałem. Zapewnia to, że jeden plik zostanie kiedykolwiek utworzony i zaktualizowany. Jeśli nie istnieje żaden plik i zadzwonię na numer PUT
5 razy, za pierwszym razem utworzy plik, a następnie 4 razy zastąpi plik tym, co wysyłasz. Jeśli zadzwonisz pod numer POST
5 razy, aby go utworzyć, utworzy 5 plików.
You PUT to that exact URI. If you don't you have to send a 301 (Moved Permanently) to the user and allow then make a choice whether or not to redirect the request. Most times the server you PUT to usually hosts the resource and takes care of updating it
To są główne punkty kiedy użyć PUT
miarę POST
dotyczy
You can also create/update and then some...
Jak wspomniałem powyżej, istnieje kilka kluczowych różnic.
- Post jest bardziej ogólny. W jaki sposób?niektóre inne przykłady zawierają bramę do innych protokołów, może ona przyjąć odpowiedź i wysłać ją do jakiejś obsługi danych w środku tam, lub może rozszerzyć jakąś funkcjonalność.
- Wpis nie podlega ograniczeniu "Do dokładnego identyfikatora URI lub powiadomienia", na przykład
POST
może dołączyć zasób do istniejącej kolekcji i zdecydować, gdzie jest przechowywany.
A co z Delete
Dlaczego nie po prostu POST
?
Kiedy DELETE
, serwer nie powinny odpowiedzieć sukces chyba usunąć zasób lub przenieść go do niedostępnej lokalizacji wówczas odpowiedź jest wysyłana.
Dlaczego to jest ważne? Co się stanie, jeśli zadzwonisz pod numer DELETE
, ale zasób musi przejść "APPROVAL" przed usunięciem? Jeśli usunięcie może zostać odrzucone, nie można wysłać pomyślnie kodu błędu i jeśli postępujesz zgodnie z podstawową specyfikacją, jest to mylące dla osoby dzwoniącej. Tylko przykład Jestem pewien, że możesz wymyślić wiele innych.
Właśnie podkreślono niektóre z najważniejszych punktów na kiedy używać wspólnego Http verbs
dobre wyjaśnienie. Nie wdając się w zbyt wiele szczegółów, o jakich "oszustach" mówimy? –
To naprawdę proste. Podczas korzystania z metod Rails do generowania formularzy, jeśli podasz PUT lub DELETE, Railsy faktycznie POST formularz, ale zawiera ukryte pole w formularzu, który określa żądaną metodę HTTP. Następnie, podczas przetwarzania formularza, Railsy szukają tego ukrytego pola, a jeśli istnieje, zgłasza (poprzez obiekt żądania), że formularz został wysłany za pomocą DELETE lub PUT, mimo że został on rzeczywiście wysłany za pomocą POST. Zasadniczo, jeśli wybierzesz DELETE, request.method zwróci: delete, nawet jeśli formularz został POSTed. To wszystko dzieje się automagicznie. – mipadi
To jest proste. Dzięki. –