Zgodnie z poniższym scenariuszem
Powiedzmy, że ktoś wysyła żądanie do Twojego serwera z danymi, które są w odpowiednim formacie, ale po prostu nie są „dobrymi” danymi. Na przykład wyobraź sobie, że ktoś wysłał wartość typu String do punktu końcowego interfejsu API, który oczekiwał wartości typu String; ale wartość ciągu zawierała dane, które były na czarnej liście (np. uniemożliwiały ludziom używanie „hasła” jako hasła). wtedy kod statusu mógłby wynosić 400 lub 422?
Do tej pory zwracałbym „400 złych żądań”, co według w3.org oznacza:
Żądanie nie mogło zostać zrozumiane przez serwer z powodu nieprawidłowej składni. Klient NIE POWINIEN powtarzać żądania bez modyfikacji.
Ten opis nie do końca pasuje do okoliczności; ale jeśli przejdziesz przez listę podstawowych kodów stanu HTTP zdefiniowanych w protokole HTTP / 1.1, jest to prawdopodobnie najlepszy wybór.
Ostatnio jednak ktoś z mojego zespołu deweloperów zwrócił mi uwagę, że popularne interfejsy API zaczynają używać rozszerzeń HTTP, aby uzyskać bardziej szczegółowe informacje o raportowaniu błędów. W szczególności wiele interfejsów API, takich jak Twitter i Recurly, używa kodu stanu „422 Unprocessable Entity”, zgodnie z definicją w rozszerzeniu HTTP dla WebDAV. Kod stanu HTTP 422 mówi:
Kod statusu 422 (Unprocessable Entity) oznacza, że serwer rozumie typ zawartości jednostki żądania (stąd kod statusu 415 (Unsupported Media Type) jest nieodpowiedni), a składnia jednostki żądania jest poprawna (a zatem 400 (Bad Request ) kod statusu jest nieodpowiedni), ale nie mógł przetworzyć zawartych instrukcji. Na przykład ten warunek błędu może wystąpić, jeśli treść żądania XML zawiera poprawnie sformułowane (tj. Poprawne składniowo), ale semantycznie błędne instrukcje XML.
Wracając do naszego przykładu hasła z góry, ten kod statusu 422 wydaje się znacznie bardziej odpowiedni. Serwer rozumie, co próbujesz zrobić; i rozumie dane, które przesyłasz; po prostu nie pozwoli na przetwarzanie tych danych.