Projektujemy API RESTful do zwracania kolekcji dokumentów. Nasza początkowa implementacja używa kodów statusu HTTP do wskazania, czy żądanie nie może zostać spełnione. To wydaje się być powszechnie akceptowaną najlepszą praktyką (patrz na przykład here).W jaki sposób należy obsługiwać wyjątki w RESTful API w celu uzyskania wyników zbierania?
Niedawno wystąpił problem polegający na pobraniu przez użytkownika 1000 dokumentów. Nie udało się pobrać jednego z plików, dlatego zwróciliśmy kod statusu HTTP 500.
Alternatywą może być zwrócenie kodu statusu HTTP 200 z ładunkiem zawierającym 999 dokumentów, które udało nam się odzyskać, a następnie kolekcja błędów wskazująca błąd, który się nie powiódł.
Czy to alternatywne podejście jest naruszeniem restrykcyjnych zasad? W jaki sposób należy zająć się tą sytuacją? Czy są jakieś opcje poza tymi dwoma podejściami?
Dzięki Vivin za dane wejściowe. Sądzę więc, że możliwą linią dzielącą jest sytuacja, w której sytuacja jest uważana za "wyjątkową". Jeśli tak, należy zwrócić status HTTP 500. Jeśli sytuacja nie jest wyjątkiem i można się spodziewać, że będzie regularnie występować w ramach normalnego korzystania z API, to prawdopodobnie HTTP 200 jest bardziej odpowiedni, wysyłając informacje o błędzie w (dobrze udokumentowanej!) Treści ładunku. –
@JoeAlfano Prawidłowo. Jeśli jest to * rzeczywisty * wyjątek, którego użytkownicy nie mogą odzyskać, wówczas HTTP 500 jest w porządku. W przeciwnym razie możesz podać dowolne częściowe dane wraz z błędami, a użytkownik może zdecydować, jak sobie z tym poradzić. –