Tworzę RESTful API, które będzie przetwarzać szereg interakcji użytkownika, w tym składanie zamówień przy użyciu zapisanych kart kredytowych.
W przypadku pomyślnego zamówienia zwracam 200 OK, aw przypadku, gdy żądanie zamówienia jest źle sformułowane lub nieprawidłowe, zwracam 400 złych żądań. Ale co mam zwrócić, jeśli podczas realizacji zamówienia wystąpi problem?
- Zlecenie klienta POSTS do serwera dla zasobu użytkownika. Jeśli użytkownik nie istnieje, zwracany jest błąd 404 Not Found.
- Format zamówienia i informacje są sprawdzane. Jeśli nie jest poprawne, zwracanych jest 400 złych żądań.
- Zamówienie jest realizowane. Jeśli zamówienie się powiedzie, dla zamówienia zwracany jest 201 Utworzony. W przypadku napotkania nieoczekiwanego błędu zwracany jest błąd 500 serwera.
Ostatnim krokiem jest problem - co mam zwrócić, jeśli zamówienie nie zostało zrealizowane z innego powodu? Możliwe scenariusze mogą obejmować:
- Produkt wyprzedany
- Osiągnięto maksymalny limit zamówień użytkownika
- Niepowodzenie transakcji kartą kredytową (niewystarczające środki itp.)
Wydaje się, że to nie byłoby odpowiednie dla 400 lub 500. Jeśli cokolwiek mógłbym zobaczyć to jako 400, jeśli nie ma lepszego kodu - żądanie było nieprawidłowe zgodnie z regułami biznesowymi. To po prostu nie wydaje się dokładne.
Edycja: znalazłem również tę istniejącą dyskusję na ten sam temat. Wszystkie odpowiedzi wydają się wskazywać na używanie kodów stanu dla tego typu naruszeń, z pewną dyskusją między używaniem rozszerzenia 400, 409 lub 422.