Jak zaprojektować obsługę błędów API

Niezawodna integracja określa, które żądania należy ponowić, wyjaśnić użytkownikowi lub przekazać operatorowi.

Oddziel błędy według źródła

Błąd walidacji, brak autoryzacji, limit liczby żądań, przekroczenie limitu czasu i odpowiedź 500 to różne sytuacje. Jeden ogólny błąd ukrywa akcję dostępną dla użytkownika lub systemu.

Określ, kto może rozwiązać problem: użytkownik, Twój kod, zewnętrzny dostawca lub administrator. To określa stan, komunikat i zasady ponawiania.

Schemat obsługi błędów API od walidacji po ponowną próbę i czytelną odpowiedź

Walidacja i umowa API

Sprawdź wymagane pola, typy, długości i dozwolone wartości przed żądaniem zewnętrznym. Użytkownicy otrzymują precyzyjną informację zwrotną, a integracja nie marnuje limitów szybkości na nieprawidłowe dane.

Potwierdź również odpowiedź. Status 200 nie gwarantuje, że odpowiedź ma oczekiwaną strukturę ani że operacja biznesowa została zakończona.

  • Nie ufaj danym tylko dlatego, że istnieje typ TypeScript.
  • Udokumentuj wersję API i dopuszczalne wartości.
  • Obsługuj brakujące pole bez zawieszania całego procesu.
  • Nigdy nie udostępniaj użytkownikowi nieprzetworzonego śladu stosu.

Limity czasu, ponowne próby i limity szybkości

Każde żądanie zewnętrzne wymaga limitu czasu. Bez niego dostawca, który zawiesił się w działaniu, może bez końca blokować proces systemowy albo użytkownika.

Ponowienia powinny mieć rosnące odstępy, ścisły limit prób i losowe rozproszenie czasu. Przestrzegaj opcji Retry-After w przypadku odpowiedzi 429 i zabezpiecz płatności i operacje tworzące rekordy kluczem idempotencji.

SytuacjaTypowa odpowiedź
400: błąd walidacjiNie ponawiaj; wskaż błędne pole
401/403Napraw autoryzację, zamiast ponawiać próby na ślepo
429Poczekaj zgodnie ze wskazówkami dostawcy
Timeout/5xxOgraniczone ponowienia, tylko gdy operacja jest bezpieczna

Logi bez zdradzania tajemnic

Dzienniki mogą zawierać identyfikator żądania, kategorię punktu końcowego, stan, czas trwania i bezpieczny kontekst. Tokeny dostępu, hasła, dane kart i pełne dane osobowe nie należą do nich.

Identyfikator korelacji przechodzący przez formularz, serwer i dostawcę pomaga prześledzić jedno wywołanie bez wyszukiwania według danych osobowych.

  • Maskuj tokeny i pliki cookie.
  • Przechowuj dzienniki tylko tak długo, jak to konieczne.
  • Oddziel komunikaty użytkownika od diagnostyki wewnętrznej.
  • Wysyłaj alerty o powtarzających się awariach krytycznych.

Co powinien zobaczyć użytkownik

Komunikat powinien jasno wskazywać, czy dane zostały zapisane i co użytkownik ma zrobić dalej. Jeśli powtórzenie jest niebezpieczne, nie proś o kolejne kliknięcie przed sprawdzeniem statusu.

W przypadku długich operacji ujawniaj postęp i dostarczaj wynik asynchronicznie. Niezawodność nie polega na braku awarii; jest to przewidywalne zachowanie w przypadku wystąpienia awarii.

Szybkie odpowiedzi

Często zadawane pytania

Czy należy ponawiać każde 500 odpowiedzi?

Nie. Ponów próbę tylko w przypadku spodziewanych tymczasowych niepowodzeń i tylko wtedy, gdy zapobiegniesz zdublowaniu wyników.

Co to jest klucz idempotencji?

Stabilny identyfikator operacji, który pomaga serwerowi uniknąć tworzenia drugiego wyniku po wielokrotnym żądaniu.

Czy można rejestrować pełne odpowiedzi API?

Dopiero po sprawdzeniu danych i zamaskowaniu danych wrażliwych; pełne zestawy danych są często niepotrzebne i ryzykowne.