Mam aplikację, która wysyła wiadomości do użytkowników. W żądaniu pocztowym przesyłany jest ciąg XML zawierający wszystkich użytkowników, którzy powinni otrzymać tę konkretną wiadomość. Jeśli któryś z użytkowników na liście nie istnieje, oddaję listę brakujących użytkowników z powrotem do klienta do dalszej oceny.
Teraz zadaję sobie pytanie, jaki byłby prawidłowy kod statusu dla aplikacji, mówiąc, że żądanie zostało zaakceptowane, ale są rzeczy, których nie można zrobić.
Problemu można by uniknąć, gdyby nie pozwolono na umieszczenie brakujących użytkowników na liście. Wtedy przy próbie wysłania wystąpiłby błąd 4xx. Jednak tworzenie API w ten sposób nie ma sensu. Z drugiej strony mógłbym uznać, że warunek błędu dotyczy wyłącznie aplikacji. Ale wysłanie 200 po prostu nie wydaje się właściwe. Byłoby miło dać klientowi wskazówkę, kiedy dokładnie przyjrzeć się odpowiedzi błędu. np. aby uniknąć ciągłego wysyłania wiadomości do tych użytkowników
źródło
Miałem ten sam problem i ostatecznie użyłem dwóch różnych rozwiązań:
202: Accepted
, wskazujący, że żądanie było prawidłowe, ale nie ma gwarancji, że wszystko poszło tak, jak powinno.200
w odpowiedzi, ale dołącz listę rzeczy, które nie wyszły w treści odpowiedzi.Drugi zwykle działa najlepiej, ale pierwszy jest świetny, jeśli jesteś leniwy lub używasz kolejki do przetwarzania.
źródło
A co z używaniem 206 Częściowych treści. Wiem, że 206 jest bardziej o zakresach, ale co, jeśli mogłoby to wskazywać na częściowo pomyślne żądanie?
źródło
HyperText Transfer Protocol zajmuje się stroną transmisyjną rzeczy. Nie ma kodów błędów do obsługi błędów na poziomie aplikacji.
Zwrócenie 200 jest tutaj właściwą rzeczą. Jeśli chodzi o HTTP, żądanie zostało poprawnie odebrane, poprawnie obsłużone, a Ty odsyłasz odpowiedź. Tak więc na poziomie HTTP wszystko jest w porządku. Wszelkie błędy lub ostrzeżenia związane z aplikacją działającą na górze http powinny znajdować się w odpowiedzi. Pozwoli to również uniknąć nieprzyjemnych problemów, które możesz napotkać na serwerach proxy, które mogą nie obsługiwać niektórych odpowiedzi w oczekiwany sposób.
źródło