Typ Status
określa logiczny model błędów odpowiedni dla różnych środowisk programowania, w tym interfejsów API typu REST i RPC. Jest używany przez gRPC. Model błędu:
- Proste w obsłudze i zrozumiałe dla większości użytkowników
- Wystarczająca elastyczność, aby sprostać nieoczekiwanym potrzebom
Omówienie
Komunikat Status
zawiera 3 części danych: kod błędu, komunikat o błędzie i szczegóły błędu. Kod błędu powinien mieć postać wyliczeniową google.rpc.Code
, ale w razie potrzeby może przyjmować dodatkowe kody błędów. Komunikat o błędzie powinien być przeznaczony dla programistów w języku angielskim, aby ułatwić deweloperom zrozumienie i rozwiązanie błędu. Jeśli potrzebny jest zlokalizowany komunikat o błędzie widoczny dla użytkownika, umieść go w szczegółach błędu lub zlokalizuj go w kliencie. Opcjonalne szczegóły błędu mogą zawierać dowolne informacje o błędzie. Pakiet google.rpc
zawiera wstępnie zdefiniowany zestaw typów szczegółów błędu, których można używać w przypadku typowych błędów.
Mapowanie języka
Komunikat Status
to logiczna reprezentacja modelu błędu, ale niekoniecznie musi to być rzeczywisty format przewodu. Gdy komunikat Status
jest ujawniany w różnych bibliotekach klienta i różnych protokołach przewodów, może być inaczej mapowany. Na przykład zostanie ona prawdopodobnie zmapowana na pewne wyjątki w języku Java, ale bardziej prawdopodobne jest zmapowane na niektóre kody błędów w języku C.
Inne zastosowania
Model błędu i komunikat Status
można używać w różnych środowiskach (z interfejsami API lub bez nich), aby zapewnić spójne środowisko programistyczne w różnych środowiskach.
Przykładowe zastosowania tego modelu błędu:
Błędy częściowe. Jeśli usługa musi zwrócić klientowi częściowe błędy, może umieścić w normalnej odpowiedzi element
Status
, aby wskazać te błędy.Błędy przepływu pracy. Typowy przepływ pracy składa się z kilku etapów. Każdy krok może zawierać komunikat
Status
do zgłaszania błędów.Operacje wsadowe. Jeśli klient używa żądania zbiorczego i odpowiedzi zbiorczej, komunikat
Status
należy używać bezpośrednio w odpowiedzi zbiorczej, po jednym na każdą odpowiedź podrzędną dotyczącą błędu.Operacje asynchroniczne. Jeśli wywołanie interfejsu API zawiera operację asynchroniczną, która powoduje wyświetlenie odpowiedzi, stan tych operacji powinien być bezpośrednio reprezentowany za pomocą komunikatu
Status
.Logowanie. Jeśli niektóre błędy interfejsu API są przechowywane w dziennikach, komunikat
Status
może zostać użyty bezpośrednio po usunięciu wymaganego ze względów bezpieczeństwa lub prywatności.
Zapis JSON | |
---|---|
{ "code": number, "message": string, "details": [ { "@type": string, field1: ..., ... } ] } |
Pola | |
---|---|
code |
Kod stanu, który powinien być wartością wyliczeniową równą |
message |
komunikat o błędzie widoczny dla dewelopera. Powinien być w języku angielskim; Każdy komunikat o błędzie widoczny dla użytkowników powinien zostać zlokalizowany i wysłany w polu |
details[] |
Lista komunikatów ze szczegółami błędu. Istnieje typowy zestaw typów wiadomości, których mogą używać interfejsy API. Obiekt zawierający pola dowolnego typu. Dodatkowe pole |