Obecnie zwracam 401 nieautoryzowanych za każdym razem, gdy napotykam błąd sprawdzania poprawności w mojej aplikacji REST API opartej na Django / Piston . Po przejrzeniu rejestru kodów stanu HTTP nie jestem przekonany, że jest to odpowiedni kod do niepowodzenia sprawdzania poprawności, co wszyscy polecamy?
- 400 złych wniosków
- 401 Nieautoryzowane
- 403 Zabronione
- 405 Metoda niedozwolona
- 406 Niedopuszczalne
- 412 Warunek wstępny nie powiódł się
- 417 Oczekiwanie nie powiodło się
- 422 Podmiot nieprzetworzony
- 424 Nieudana zależność
Aktualizacja : „Błąd sprawdzania poprawności” powyżej oznacza błąd sprawdzania poprawności danych na poziomie aplikacji, tj. Niepoprawnie określony czas, fałszywy adres e-mail itp.
validation
rest
http-status-codes
michaeljoseph
źródło
źródło
Odpowiedzi:
Jeśli „błąd sprawdzania poprawności” oznacza, że w żądaniu występuje błąd klienta, użyj HTTP 400 (niepoprawne żądanie). Na przykład, jeśli identyfikator URI ma mieć datę ISO-8601 i okaże się, że jest w niewłaściwym formacie lub odnosi się do 31 lutego, wówczas zwróci HTTP 400. Podobnie, jeśli spodziewasz się poprawnie sformatowanego XML w treści encji i nie można go przeanalizować.
(1/2016): W ciągu ostatnich pięciu lat bardziej szczegółowy protokół HTTP 422 (jednostka nieprzetworzona) WebDAV stał się bardzo rozsądną alternatywą dla HTTP 400. Zobacz na przykład jego użycie w JSON API . Należy jednak pamiętać, że HTTP 422 nie przeszedł na HTTP 1.1, RFC-7231 .
RESTful Web Services Richardsona i Ruby zawiera bardzo pomocny dodatek na temat tego, kiedy używać różnych kodów odpowiedzi HTTP. Mówią:
i:
źródło
Z RFC 4918 (i również udokumentowane na stronie http://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml ):
źródło
Duplikatem w bazie danych powinno być
409 CONFLICT
.Polecam używać
422 UNPROCESSABLE ENTITY
do błędów sprawdzania poprawności.Długo wyjaśniam kody 4xx tutaj: http://parker0phil.com/2014/10/16/REST_http_4xx_status_codes_syntax_and_sematics/
źródło
Oto on:
rfc2616 # section-10.4.1 - 400 Złe żądanie
rfc7231 # sekcja-6.5.1 - 6.5.1. 400 złych wniosków
Odnosi się do zniekształconych (źle sformatowanych) przypadków!
rfc4918 - 11,2. 422 Podmiot nieprzetworzony
Wniosek
Ogólna zasada: [_] 00 obejmuje najbardziej ogólny przypadek i przypadki, które nie są objęte wyznaczonym kodem.
422 pasuje do błędu sprawdzania poprawności najlepszego obiektu (dokładnie moja zalecenie :)
Co do błędu semantycznego - Pomyśl o czymś takim jak sprawdzanie poprawności „Ta nazwa użytkownika już istnieje”.
400 jest niepoprawnie używany do sprawdzania poprawności obiektu
źródło
Powiedziałbym, że technicznie nie może to być błąd HTTP, ponieważ zasób został (prawdopodobnie) poprawnie określony, użytkownik został uwierzytelniony i nie wystąpił błąd operacyjny (jednak nawet specyfikacja zawiera niektóre zastrzeżone kody, takie jak 402 Wymagana płatność, które nie są t ściśle związane z HTTP, chociaż może być wskazane, aby mieć to na poziomie protokołu, aby każde urządzenie mogło rozpoznać warunek).
Jeśli tak jest w rzeczywistości, dodam pole stanu do odpowiedzi z błędami aplikacji, takimi jak
<status><code>4</code> <message> Niepoprawny zakres dat </message> </status>
źródło
Jest trochę więcej informacji na temat semantyki tych błędów w RFC 2616 , która dokumentuje HTTP 1.1.
Osobiście prawdopodobnie skorzystałbym
400 Bad Request
, ale to tylko moja osobista opinia bez jakiegokolwiek faktycznego wsparcia.źródło
Co dokładnie rozumiesz przez „błąd sprawdzania poprawności”? Co zatwierdzasz? Czy masz na myśli coś takiego jak błąd składniowy (np. Źle sformułowany XML)?
Jeśli tak jest, powiedziałbym, że 400 złych żądań jest prawdopodobnie właściwą rzeczą, ale nie wiedząc, co to jest „sprawdzanie poprawności”, nie można powiedzieć.
źródło