Ponieważ żądanie POST w szablonie POST/Przekierowanie/GET (PRG) zwraca kod przekierowania (303 See Other
) w przypadku sukcesu, czy w ogóle możliwe jest poinformowanie klient o specyficznym smaku powodzenia, którym ma się cieszyć (np. OK, Stworzony, Zaakceptowany itd.), a także wszelkich odpowiednich nagłówków (np. Location
dla 201 Created
, które mogłyby kolidować z przekierowaniem)?POST/Przekierowanie/GET (PRG) vs. znaczące kody odpowiedzi 2xx
Może to być na przykład odpowiednie, aby przekierowany GET odpowiedział odpowiednimi kodami odpowiedzi &, których można się spodziewać po odpowiedzi POST?
HTTP 1.1 Spec mówi:
Metoda [303] istnieje głównie w celu umożliwienia wyjścia POST aktywowanego skryptu przekierować agenta użytkownika do wybranego surowca.
Ale nie oferuje żadnego wglądu w utratę częstszego kodu statusu i nagłówków.
Edit - Przykład:
Klient wysyła żądanie POST do /orders
która tworzy nowy zasób w /orders/1
.
Jeśli serwer wysyła stan 201 Created
z location: /orders/1
, zautomatyzowany klient będzie zadowolony, ponieważ wie, że zasób został utworzony i wie, gdzie on jest, ale człowiek używający przeglądarki będzie niezadowolony, ponieważ dostanie strona /orders
ponownie, a jeśli go odświeżą, to wyślą kolejne zamówienie, co raczej nie będzie tym, czego chcą.
Jeśli serwer wyśle stan 303 See Other
z location: /orders/1
, człowiek zostanie zabrany na jego zamówienie, poinformowany o jego istnieniu i stanie i nie będzie mu groziło powtórzenie przez przypadek. Zautomatyzowany klient nie zostanie jednak wyraźnie poinformowany o tworzeniu zasobu, będzie musiał wywnioskować tworzenie w oparciu o nagłówek location
. Co więcej, jeśli przekierowania 303
gdzie indziej (np. /users/someusername/orders
) człowiek może być dobrze przystosowany, ale automatyczny klient pozostaje drastycznie niedoinformowany.
Moja sugestia to wysłanie 201 Created
jako odpowiedzi na przekierowane żądanie otrzymania nowego zasobu, ale im więcej o tym myślę, tym mniej mi się podoba (może to być trudne, aby zapewnić, że tylko twórca otrzyma numer 201
i nie powinno się wydawać, że żądanie GET
utworzyło zasób).
Jaka jest optymalna reakcja w tej sytuacji?
Czy możesz podać przykład tego, co myślisz? – Gumbo
Edytowałem pytanie, aby podać przykład. Dzięki. –
Wystarczy jednoznacznie: Zapewniłeś już, że ludzki użytkownik będzie dobrze poinformowany o tym, co się właśnie wydarzyło, a teraz próbujesz zrobić to samo dla zautomatyzowanego? – sdleihssirhc