W programowaniu w stylu RESTful powinniśmy używać metod HTTP jako naszych elementów składowych. Jestem trochę zdezorientowany, które metody pasują do klasycznych metod CRUD. GET / Read i DELETE / Delete są wystarczająco oczywiste.
Jaka jest jednak różnica między PUT / POST? Czy pasują one do siebie za pomocą opcji Utwórz i zaktualizuj?
http
rest
crud
http-method
Rysował
źródło
źródło
Cały klucz polega na tym, czy robisz idempotentną zmianę, czy nie. Oznacza to, że jeśli dwukrotne podjęcie działania w związku z wiadomością spowoduje, że pojawi się „ta sama” rzecz, tak jakby to było zrobione tylko raz, masz idempotentną zmianę i powinna być odwzorowana na PUT. Jeśli nie, mapuje na POST. Jeśli nigdy nie zezwalasz klientowi na syntezowanie adresów URL, PUT jest bardzo blisko aktualizacji, a POST może sobie poradzić z funkcją Utwórz, ale z pewnością nie jest to jedyny sposób, aby to zrobić; jeśli klient wie, że chce tworzyć
/foo/abc
i wie, jakie treści tam umieścić, działa dobrze jako PUT.Kanoniczny opis POST ma miejsce, gdy zobowiązujesz się do zakupu: jest to akcja, której nikt nie chce powtarzać, nie wiedząc o tym. Dla kontrastu, wcześniejsze ustawienie adresu wysyłki dla zamówienia może być wykonane za pomocą PUT w porządku: nie ma znaczenia, czy ktoś poleci ci wysłać go
6 Anywhere Dr, Nowhereville
raz, dwa lub sto razy: wciąż jest to ten sam adres. Czy to oznacza, że jest to aktualizacja? Może być… Wszystko zależy od tego, jak chcesz napisać zaplecze. (Pamiętaj, że wyniki mogą nie być identyczne: możesz zgłosić użytkownikowi, kiedy ostatnio zrobił PUT jako część reprezentacji zasobu, co zapewni, że powtarzane PUT nie spowodują identycznego wyniku, ale wynik nadal będzie być „tym samym” w sensie funkcjonalnym).źródło
POST
iPUT
jest interesujące i powinno dać odpowiedź na pytanie „Co to jest„ tworzyć ”, a które„ aktualizować ”? o wiele jaśniej. Ponadto, w odniesieniu do implementacji interfejsu API, wynikałoby z tego, że powtarzalnośćPUT
powinnaPOST
oznaczać cichy brak operacji , podczas gdy powtarzalność może zgłosić wyjątek, jeśli jakiś aspekt wysyłanych danych ma pozostać unikalny w magazynie danych popiera aplikację.Szukałem tej samej odpowiedzi, oto, co mówi IBM. IBM Link
źródło
W tej chwili (2016) najnowszymi czasownikami HTTP są GET, POST, PATCH , PUT i DELETE
Przegląd
Mam nadzieję że to pomoże!
Jeśli jesteś zainteresowany projektowaniem interfejsów API REST, jest to lektura dla ansewome! strona internetowa wersja online repozytorium github
źródło
Jest świetna rozmowa wideo z YouTube na Stormpath z faktycznym wyjaśnieniem tego, URL powinien przejść do właściwej części filmu:
burza wideo youtube
Warto również obejrzeć ponad godzinę rozmowy, ale bardzo ciekawe, jeśli myślisz o zainwestowaniu czasu w budowę interfejsu API REST.
źródło
To zależy od konkretnej sytuacji .. ale ogólnie:
PUT = zaktualizuj lub zmień konkretny zasób za pomocą konkretnego identyfikatora URI zasobu.
POST = utwórz nowy zasób pod źródłem danego URI.
To znaczy
Edytuj post na blogu:
PUT: / blog / entry / 1
Utwórz nowy:
POST: / blog / entry
PUT może utworzyć nowy zasób w niektórych okolicznościach, w których identyfikator URI nowego zasobu jest czysty przed żądaniem. POST może być również użyty do zaimplementowania kilku innych przypadków użycia, które nie są objęte innymi (GET, PUT, DELETE, HEAD, OPCJE)
Ogólne zrozumienie dla systemów CRUD to GET = żądanie, POST = tworzenie, Put = aktualizacja, DELETE = usuwanie
źródło
Elementy składowe REST to głównie zasoby (i URI) i hipermedia. W tym kontekście
GET
jest sposobem na uzyskanie reprezentacji zasobu (który może być faktycznie odwzorowany naSELECT
CRUD).Jednak niekoniecznie należy się spodziewać mapowania jeden na jeden między operacjami CRUD a czasownikami HTTP. Główna różnica między
PUT
iPOST
dotyczy ich idempotentnej właściwości.POST
jest również częściej używany do częściowych aktualizacji, jakPUT
generalnie oznacza to wysłanie pełnej nowej reprezentacji zasobu.Sugerowałbym przeczytanie tego:
Specyfikacja HTTP jest również użytecznym odniesieniem:
źródło
Ogólnie mówiąc, używam tego wzoru:
źródło
Projekt Symfony próbuje połączyć metody HTTP z metodami CRUD, a ich lista kojarzy je w następujący sposób:
Warto zauważyć, że, jak mówią na tej stronie: „W rzeczywistości wiele współczesnych przeglądarek nie obsługuje metod PUT i DELETE”.
Z tego co pamiętam, Symfony „fałszuje” PUT i DELETE dla przeglądarek, które nie obsługują ich podczas generowania formularzy, aby starać się być tak blisko korzystania z teoretycznie poprawnej metody HTTP, nawet jeśli przeglądarka nie obsługuje to.
źródło