Przygotowuję specyfikację dla usługi REST, której część będzie obejmować możliwość dławienia użytkowników w całej usłudze oraz na grupach lub na poszczególnych zasobach. Podobnie limity czasowe dla nich byłyby konfigurowalne dla zasobu / grupy / usługi.
Właśnie przeglądam specyfikację HTTP 1.1 i próbuję zdecydować, w jaki sposób powiadomię klienta, że żądanie nie zostanie zrealizowane, ponieważ osiągnęło limit.
Początkowo doszedłem do wniosku, że kod klienta 403 - Forbidden
jest tym, ale ze specyfikacji:
Autoryzacja nie pomoże, a prośba NIE POWINNA zostać powtórzona
przeszkadzało mi to.
Wydaje się, że 503 - Service Unavailable
jest to lepsze rozwiązanie, ponieważ pozwala na komunikację czasu ponownej próby za pomocą Retry-After
nagłówka.
Możliwe, że w przyszłości będę mógł poprzeć „kupowanie” większej liczby żądań za pośrednictwem eCommerce (w takim przypadku byłoby miło, gdyby kod klienta 402 - Payment Required
został sfinalizowany!) - ale sądzę, że można to również wcisnąć w odpowiedź 503.
Jak myślisz, którego powinienem użyć? Czy jest jeszcze jeden, którego nie rozważałem?
źródło
Do pewnego stopnia możesz robić, co chcesz, z kodami, ale zgodziłbym się, że możesz użyć
503
, lub jeśli chcesz402
, nikt nie może narzekać, że psujesz rzeczy.Edycja: purysta może powiedzieć, że powinieneś zacząć od 503, a następnie zmienić, kiedy będzie można dokonać płatności.
Doskonały dodatek do tego w komentarzach:
źródło