Projektuję interfejs API RESTful i napotkałem problem z tytułem, dla zachowania przejrzystości:
Czy powinienem szybko zawieść, jeśli klient wyśle nierozpoznany parametr? Na przykład,
http://example.com/api/foo?bar=true&paula=bean
Powyżej bar
jest poprawnym parametrem, ale paula
nie jest określony przez API. Czy powinienem
- Ostrzeż klienta o błędzie
- Szybko zawieść
- Zignoruj to
Jeśli ostrzeżę klienta, mogę wydać ostrzeżenie tylko dla pierwszego parametru, ponieważ może on wysyłać ich prawie nieskończoną liczbę, a serwer prawdopodobnie ma lepsze rzeczy do zrobienia. Podobnie w przypadku niepowodzenia określa tylko pierwszy nieprawidłowy parametr jako problem.
Wolę niepowodzenie niż ostrzeżenie, aby zmusić programistę do podjęcia działania, ponieważ w przeciwnym razie mogą zignorować problem i nadal marnować zasoby lub skończyć nieumyślnie kultywowaniem ładunków. W tym względzie nic gorszego nie robić.
Czy moje argumenty mają sens? Czy istnieje akceptowana praktyka w takich sprawach?
źródło
api/v1
itp., Ale nadal nie pozwala na aktualizacje przyrostowe. +1Odpowiedzi:
Moim zdaniem powinieneś zwrócić stan Nieprawidłowe żądanie, aby klient wiedział, że to, co próbuje zrobić, jest nieprawidłowe. Na moją opinię w tej sprawie wpływa koncepcja, że interfejsy API RESTful są wykrywalne . Jeśli podajesz wystarczające informacje z góry, klient nigdy nie próbuje złożyć nieprawidłowego żądania na początek. Jeśli tak się stanie, oznacza to, że coś jest nie tak w kodzie klienta, a niepowodzenie szybko powiadomi sekundę o tym błędzie. Oczywiście jest to bardzo purystyczne podejście i może nie być zalecane, jeśli nie można wykryć interfejsu API.
Bardziej pragmatycznym podejściem może być zignorowanie niepoprawnych parametrów, ale tak czy inaczej, należy dobrze udokumentować zachowanie.
źródło
Jeśli korzystasz z publicznego interfejsu API (lub interfejsu API, który będzie używany przez inny zespół), zaleciłbym zwrócenie błędu zgodnie z sugestią @RubberDuck.
Jeśli Twój interfejs API zostanie zużyty tylko w zespole (lub tylko przez ciebie), może być łatwiej zignorować dodatkowe pola (np. Wymaga mniej kodu i łatwiej zrobić).
źródło