Mam następujący punkt końcowy:
a/{id}/b
i chcesz utworzyć żądanie b
wysyłania POST
do niego. Jeśli a
z podanym {id}
nie znaleziono, czy powinienem odpowiedzieć za pomocą, 404 NOT_FOUND
a może za pomocą 409 CONFLICT
?
Jest to proste a/{id}
, sztuczka polega na tym, że tutaj stosuje się podśrodek.
rest
api
api-design
http-request
Opal
źródło
źródło
Odpowiedzi:
404 NOT FOUND
wydaje się odpowiednią odpowiedzią, ponieważ zasób o tym identyfikatorze nie istnieje. Jest to bardzo jasne do zrozumienia i oczekujesz takiej samej odpowiedzi, jeślia/{id}
zostanie wywołany.409 CONFLICT
nie wydaje mi się lepszym wyborem, ponieważ w twoim przykładzie zwrócisz 409, gdy nie znaleziono zasobu nadrzędnego :).Ale pamięta, że najważniejszą rzeczą jest spójność interfejsu API
źródło
id
), wynosi 404. Ale jeśli folder został przekazany w treści, może to być cokolwiek innego (412, 422 ... coś, co reprezentuje "sprawdzanie poprawności nie powiodło się: folder nie nie istnieje"). To dobre pytanie, które należy zadać i przedyskutować.Oprócz odpowiedzi @ Dherik.
Identyfikatory URI są identyfikatorami , dlatego musimy pamiętać, że (
/a/{id}/b
jest to identyfikator). URI jest bez znaczenia dla WWW, a więc jest dla klienta HTTP.404 to właściwa odpowiedź . Zasadniczo serwer odpowiada
To, czy brakujący zasób jest nadrzędny czy podrzędny, nie ma znaczenia.
My, programiści, widzimy hierarchie i ścieżki w URI, ale klienci HTTP nie. Innymi słowy, HTTP ma być interpretowany tylko przez klientów HTTP, ale nie przez ludzi (deweloperów, użytkowników końcowych itp.).
W przypadku wątpliwości nie pytaj, jaki kod ma dla ciebie sens (człowiek). Nie pytaj, jaki kod ma sens dla klienta HTTP. Jak chcesz zachowywać się klient HTTP?
Dlaczego? Ponieważ niektóre kody stanu powodują, że klienci wykonują określone operacje. Na przykład 302 . Ten kod zazwyczaj powoduje, że przeglądarki internetowe przekierowują do określonej lokalizacji (URI) informowane w nagłówkach odpowiedzi.
To może nie być twój przypadek, ale ważne jest, aby być świadomym. Ostatecznie kody stanu HTTP są adresowane do klientów HTTP. Nie do naszych aplikacji. Nie dla osób.
1: 409 rzadko jest implementowany jako błąd nawigacji. Zwykle wiąże się to z wykonywaniem zdalnych operacji (usuwanie, aktualizacja, nowe itp.). Ale identyfikator URI powinien istnieć. W przeciwnym razie zwycięży 404
źródło