Mam usługę REST, która jest dostępna dla klientów iPhone i Android. Obecnie śledzę kody HTTP 200, 400, 401, 403, 404, 409, 500 itd.
Moje pytanie brzmi: gdzie jest zalecane miejsce na umieszczenie przyczyny / opisu / przyczyny błędu? Czy bardziej sensowne jest, aby interfejs API REST zawsze miał niestandardową przyczynę w nagłówku?
< HTTP/1.1 400 Bad Request - Missing Required Parameters.
< Date: Thu, 20 Dec 2012 01:09:06 GMT
< Server: Apache/2.2.22 (Ubuntu)
< Connection: close
< Transfer-Encoding: chunked
A może lepiej mieć go w treści odpowiedzi za pośrednictwem JSON?
< HTTP/1.1 400 Bad Request
< Date: Thu, 20 Dec 2012 01:09:06 GMT
< Server: Apache/2.2.22 (Ubuntu)
< Connection: close
< Transfer-Encoding: chunked
< Content-Type: application/json
{ "error" : "Missing Required Parameters" }
http
rest
http-error
James Cowhen
źródło
źródło
Odpowiedzi:
Cytując ze specyfikacji HTTP dla kodów błędów 400.x:
Najlepszą praktyką jest umieszczanie komunikatu o błędzie jako jednostki w treści odpowiedzi HTTP - czy to JSON, zwykły tekst, sformatowany HTML, czy jakikolwiek inny format, którego możesz chcieć użyć.
źródło
Lepiej jest mieć szczegóły błędu w treści. Ponadto wiele (większość / prawie wszystkie, np. WSGI) serwerów i klientów nie obsługuje zmiany nazwy kodu błędu - traktuj je jako ustalone pary (np. 400 to zawsze „Złe żądanie”, a nie „Złe żądanie - Ty Zapomniałem określić identyfikator użytkownika ”). Nawet jeśli się nie zepsują, nie obchodzi ich Twoja specjalna nazwa dla określonego kodu błędu.
źródło
Błąd nie należy do treści. Należy do nagłówka Warning.
Odniesienie
źródło
Warning
jak sama nazwa wskazuje, nie jest dla błędów. Dokument RFC (7234) mówi:> Użycie ostrzeżenia zamiast kodu statusu błędu odróżnia te odpowiedzi od prawdziwych awarii.