Mam interfejs API REST, który dla niektórych entpoinds, takich jak DELETE, POST lub PUT, mam pewne reguły sprawdzania poprawności, które mogą zwrócić błąd.
Teraz potrzebuję nowego typu błędu, takiego jak błąd niekrytyczny, który powinien zawieść w normalny sposób, ale powinien podjąć działanie, jeśli wysyłane są flagi „ostrzeżenia o wyłączeniu”. Taki użytkownik może zostać zapytany: „Czy na pewno chcesz zmienić ten status, jeszcze nie skończyłeś”
Pytanie : czy istnieje najlepsza praktyka w przypadku tego rodzaju błędów?
Wtórne pytania :
- Czy istnieje jakikolwiek semantyczny protokół HTTP dla takiego zachowania, z którego mogę korzystać?
- czy nadal podążam za ideą REST (dla mnie wygląda na to, że tak robię) - utrzymuję ją bezstanową
rm /file
„ostrzeżenie”, że plik jest czytany tylko podczas jego usuwania.409 CONFLICT
odpowiedzi ostrzegawczej. W ten sposób klient jest instruowany, że może wymusić połączenie z tym samym punktem końcowym i tym samym ciałem przy użyciu dodatkowych parametrów „force = 1”Odpowiedzi:
W http nie ma kodów wyników ostrzegawczych, albo zwracasz sukces (200), albo błąd (400, 500). Jedyne, co wiem o tym, może być analogiczne do tego, czego chcesz, to coś takiego jak kod 401 „nieautoryzowany” - co jest całkowitą awarią, ale powoduje, że większość klientów automatycznie próbuje ponownie nawiązać połączenie z poświadczeniami.
W przypadku interfejsu API REST musisz poinformować serwer o statusie żądania i jak obsłużyć wynik - nie możesz wysłać testu PUT i oczekiwać błędu, jeśli klient nie zostanie ukończony, lub sukcesu, jeśli tak - serwer musi to wiedzieć informacje w celu odesłania właściwego kodu wyniku.
Możesz więc wysłać flagę „ukryj ostrzeżenia” wraz z żądaniem, jeśli nie zostanie ustawiona, serwer zwróci kod błędu 409 (lub podobny), a jeśli zostanie ustawiony, zwróci kod 200 zamiast tego. Użytkownik nie może zostać zapytany „czy chcesz zmienić ten status” po wysłaniu zmiany statusu.
Możesz złożyć wniosek do serwera, aby zapytać, czy użytkownik może oczywiście zmienić status, a następnie wysłać odpowiednią prośbę.
źródło
Jeśli chcesz zezwolić użytkownikowi na zastąpienie normalnej obsługi błędów, możesz rozważyć zwrócenie statusu 200 SUKCES z dodatkowymi informacjami w rozszerzonych nagłówkach HTTP. Na przykład możesz wrócić
Dałoby to Twojemu kodowi po stronie klienta informacje niezbędne do ostrzeżenia użytkownika lub samodzielnego podjęcia działań naprawczych.
źródło