Co zgodnie z ideologią „REST” powinno znajdować się w treści odpowiedzi na żądania PUT / POST / DELETE?
A co z kodami zwrotnymi? Czy
HTTP_OK
wystarczy?Jaki jest powód takich konwencji, jeśli w ogóle?
Znalazłem dobry post opisujący różnice POST / PUT: POST vs PUT Ale nadal nie odpowiada na moje pytanie.
rest
http
post
http-delete
tuxSlayer
źródło
źródło
Ogólnie rzecz biorąc, konwencje to „myśl, jakbyś tylko dostarczał strony internetowe”.
W przypadku PUT zwróciłbym ten sam widok, który uzyskasz, gdybyś zrobił GET natychmiast po; dałoby to 200 (cóż, zakładając oczywiście, że renderowanie się powiedzie). W przypadku POST wykonałbym przekierowanie do utworzonego zasobu (zakładając, że wykonujesz operację tworzenia; jeśli nie, po prostu zwróć wyniki); kod do pomyślnego utworzenia to 201, który jest tak naprawdę jedynym kodem HTTP przekierowania spoza zakresu 300.
Nigdy nie byłem zadowolony z tego, co powinno zwrócić DELETE (mój kod obecnie tworzy HTTP 204 i pustą treść w tym przypadku).
źródło
PUT
żądania na następną stronę wydaje się złą praktyką, ponieważ odświeżenie strony wynikowej spowoduje ponowne wykonanie żądania. Zamiast tego dla mnie sensowne jest wykonanie przekierowania, zakładając, że masz do czynienia z żądaniami synchronicznymi.PUT
żądanie powodujące przywrócenie danych. Na przykład, jeśli dwie osoby odwołują się do tej samej strony, jedna dokonuje aktualizacji, a następnie druga dokonuje aktualizacji, jeśli pierwsza osoba odświeży się, aby zobaczyć wynik, w rzeczywistości spowoduje to, że rzeczy zostaną przywrócone, zanim zrobi to druga osoba ich zmiany.Tworzenie zasobu jest zazwyczaj mapowane do POST, co powinno zwrócić lokalizację nowego zasobu; na przykład w rusztowaniu Railsowym CREATE przekieruje do POKAŻ dla nowo utworzonego zasobu. To samo podejście może mieć sens w przypadku aktualizacji (PUT), ale to mniej konwencji; aktualizacja musi tylko wskazywać na sukces. Usunięcie prawdopodobnie musi tylko oznaczać sukces; jeśli chcesz przekierować, zwrócenie LISTY zasobów prawdopodobnie ma największy sens.
Sukces może być wskazany przez HTTP_OK, tak.
Jedyną twardą i szybką regułą w tym, co powiedziałem powyżej, jest to, że CREATE powinno zwrócić lokalizację nowego zasobu. Wydaje mi się to oczywiste; ma sens, że klient będzie musiał mieć dostęp do nowej pozycji.
źródło
Według RFC7231 nie ma to znaczenia i może być puste
Jak wdrażamy w projekcie rozwiązanie oparte na standardzie JSON API:
post / put: wyprowadza atrybuty obiektu jak w get (filtr pól / relacje działają tak samo)
usuń: dane zawierają tylko wartość null (jako reprezentacja brakującego obiektu)
status usuwania standardowego: 200
źródło
Podoba mi się odpowiedź Alfonso Tienda z kodu statusu HTTP do aktualizacji i usunięcia?
Oto kilka porad:
USUNĄĆ
POŁOŻYĆ
źródło