Index
BadRequest(Meldung)BadRequest.FieldViolation(Meldung)Code(Aufzählung)ErrorInfo(Meldung)Help(Meldung)Help.Link(Meldung)LocalizedMessage(Meldung)PreconditionFailure(Meldung)PreconditionFailure.Violation(Meldung)QuotaFailure(Meldung)QuotaFailure.Violation(Meldung)RequestInfo(Meldung)ResourceInfo(Meldung)RetryInfo(Meldung)Status(Meldung)
BadRequest
Beschreibt Verstöße in einer Clientanfrage. Bei diesem Fehlertyp geht es um die syntaktischen Aspekte der Anfrage.
| Felder | |
|---|---|
field_violations[] |
Beschreibt alle Verstöße in einer Clientanfrage. |
FieldViolation
Ein Nachrichtentyp, der verwendet wird, um ein einzelnes Feld mit ungültiger Anfrage zu beschreiben.
| Felder | |
|---|---|
field |
Ein Pfad, der zu einem Feld im Anfragetext führt. Der Wert ist eine Abfolge von durch Punkten getrennten Kennungen, die ein Protokollpufferfeld angeben. Hier einige Tipps: In diesem Beispiel kann
In JSON werden dieselben Werte so dargestellt:
|
description |
Eine Beschreibung, warum das Anfrageelement schlecht ist. |
reason |
Der Grund für den Fehler auf Feldebene. Dies ist ein konstanter Wert, der die unmittelbare Ursache des Fehlers auf Feldebene angibt. Sie sollte den Typ des FieldViolation innerhalb des Bereichs von google.rpc.ErrorInfo.domain eindeutig identifizieren. Diese darf höchstens 63 Zeichen umfassen und mit dem regulären Ausdruck |
localized_message |
Enthält eine lokalisierte Fehlermeldung für Fehler auf Feldebene, die sicher an den API-Nutzer zurückgegeben werden kann. |
Code
Die kanonischen Fehlercodes für gRPC APIs.
Manchmal können mehrere Fehlercodes zutreffen. Dienste sollten den spezifischsten Fehlercode liefern, der zutrifft. Beispiel: OUT_OF_RANGE sollte gegenüber FAILED_PRECONDITION bevorzugt werden, wenn beide Codes zutreffen. Entsprechend ist NOT_FOUND oder ALREADY_EXISTS gegenüber FAILED_PRECONDITION vorzuziehen.
| Enums | |
|---|---|
OK |
Kein Fehler; wird bei Erfolg angezeigt HTTP Mapping: 200 OK |
CANCELLED |
Der Vorgang wurde abgebrochen, üblicherweise vom Aufrufer. HTTP Mapping: 499 Client Closed Request |
UNKNOWN |
Unbekannter Fehler. Dieser Fehler wird z. B. angezeigt, wenn ein von einem anderen Adressbereich erhaltener HTTP Mapping: 500 Internal Server Error |
INVALID_ARGUMENT |
Der Client hat ein ungültiges Argument angegeben. Dieser Wert ist nicht identisch mit HTTP Mapping: 400 Bad Request |
DEADLINE_EXCEEDED |
Die Frist ist abgelaufen, bevor der Vorgang abgeschlossen werden konnte. Bei Vorgängen, die den Systemstatus verändern, kann dieser Fehler angezeigt werden, auch wenn der Vorgang erfolgreich abgeschlossen wurde. Zum Beispiel könnte eine erfolgreiche Antwort von einem Server so lange verzögert worden sein, dass die Frist abgelaufen ist. HTTP Mapping: 504 Gateway Timeout |
NOT_FOUND |
Eine angeforderte Entität (z. B. Datei oder Verzeichnis) wurde nicht gefunden. Hinweis für Serverentwickler: Wenn eine Anfrage, z. B. eine schrittweise Einführung von Funktionen oder eine undokumentierte Zulassungsliste, für eine gesamte Nutzerklasse abgelehnt wird, kann HTTP Mapping: 404 Not Found |
ALREADY_EXISTS |
Die Entität, die ein Client erstellen wollte (z. B. eine Datei oder ein Verzeichnis), ist bereits vorhanden. HTTP Mapping: 409 Conflict |
PERMISSION_DENIED |
Der Aufrufer hat keine Berechtigung zur Ausführung des angegebenen Vorgangs. HTTP Mapping: 403 Forbidden |
UNAUTHENTICATED |
Die Anfrage enthält keine gültigen Authentifizierungsanmeldedaten für diesen Vorgang. HTTP Mapping: 401 Unauthorized |
RESOURCE_EXHAUSTED |
Eine Ressource, z. B. ein nutzerbezogenes Kontingent, ist erschöpft oder der Speicherplatz für das gesamte Dateisystem ist ausgegangen. HTTP Mapping: 429 Too Many Requests |
FAILED_PRECONDITION |
Der Vorgang wurde abgelehnt, weil der Systemzustand nicht für die Ausführung des Vorgangs geeignet ist. Beispielsweise ist das zu löschende Verzeichnis nicht leer, ein rmdir-Vorgang wird auf eine Ressource angewendet, die kein Verzeichnis ist, usw. Dienstimplementierungen können anhand der folgenden Richtlinien zwischen HTTP Mapping: 400 Bad Request |
ABORTED |
Der Vorgang wurde abgebrochen, in der Regel aufgrund eines Parallelitätsproblems wie einer fehlgeschlagenen Sequencer-Überprüfung oder einer abgebrochenen Transaktion. Siehe obige Richtlinien zum Abwägen zwischen HTTP Mapping: 409 Conflict |
OUT_OF_RANGE |
Beim Vorgang wurde versucht, den gültigen Bereich zu überschreiten. Beispiel: Such- oder Lesevorgang über das Dateiende hinaus. Im Gegensatz zu Es gibt einige Überschneidungen zwischen HTTP Mapping: 400 Bad Request |
UNIMPLEMENTED |
Dieser Vorgang ist nicht implementiert oder wird bei diesem Dienst nicht unterstützt bzw. ist bei diesem Dienst nicht aktiviert. HTTP Mapping: 501 Not Implemented |
INTERNAL |
Interne Fehler. Das bedeutet, dass einige Invarianten, die vom zugrunde liegenden System erwartet werden, nicht erfüllt wurden. Dieser Fehlercode ist für schwerwiegende Fehler reserviert. HTTP Mapping: 500 Internal Server Error |
UNAVAILABLE |
Der Dienst ist derzeit nicht verfügbar. Dies ist höchstwahrscheinlich ein vorübergehender Zustand, der durch Wiederholen mit einem Backoff korrigiert werden kann. Es ist nicht immer sicher, nicht idempotente Vorgänge zu wiederholen. Siehe obige Richtlinien zum Abwägen zwischen HTTP Mapping: 503 Service Unavailable |
DATA_LOSS |
Dauerhafter Datenverlust oder Datenkorruption. HTTP Mapping: 500 Internal Server Error |
Fehlerinformation
Beschreibt die Ursache des Fehlers mit strukturierten Details.
Beispiel für einen Fehler beim Kontaktieren der API „pubsub.googleapis.com“, wenn sie nicht aktiviert ist:
{ "reason": "API_DISABLED"
"domain": "googleapis.com"
"metadata": {
"resource": "projects/123",
"service": "pubsub.googleapis.com"
}
}
Diese Antwort gibt an, dass die pubsub.googleapis.com API nicht aktiviert ist.
Beispiel für einen Fehler, der zurückgegeben wird, wenn versucht wird, eine Spanner-Instanz in einer Region zu erstellen, in der keine Ressourcen verfügbar sind:
{ "reason": "STOCKOUT"
"domain": "spanner.googleapis.com",
"metadata": {
"availableRegions": "us-central1,us-east2"
}
}
| Felder | |
|---|---|
reason |
Der Grund für den Fehler. Dies ist ein konstanter Wert, der die unmittelbare Ursache des Fehlers angibt. Fehlerursachen sind innerhalb einer bestimmten Fehlerdomain eindeutig. Diese darf höchstens 63 Zeichen umfassen und mit dem regulären Ausdruck |
domain |
Die logische Gruppierung, zu der der "reason" gehört. Die Fehlerdomain ist in der Regel der registrierte Dienstname des Tools oder Produkts, das den Fehler generiert. Beispiel: „pubsub.googleapis.com“. Wenn der Fehler von einer gemeinsamen Infrastruktur generiert wird, muss die Fehlerdomain ein weltweit eindeutiger Wert sein, der die Infrastruktur identifiziert. Bei der Google API-Infrastruktur ist die Fehlerdomain „googleapis.com“. |
metadata |
Zusätzliche strukturierte Details zu diesem Fehler. Schlüssel müssen dem regulären Ausdruck |
Hilfe
Bietet Links zur Dokumentation oder zum Ausführen einer Out-of-Band-Aktion.
Wenn beispielsweise eine Kontingentprüfung mit einem Fehler fehlgeschlagen ist, der darauf hinweist, dass der aufrufende Dienst den aufgerufenen Dienst nicht aktiviert hat, kann dies eine URL enthalten, die direkt zum richtigen Ort in der Entwicklerkonsole verweist, um das Bit zu ändern.
| Felder | |
|---|---|
links[] |
URLs, die auf zusätzliche Informationen zum Beheben des aktuellen Fehlers verweisen. |
Link
Beschreibt einen URL-Link.
| Felder | |
|---|---|
description |
Beschreibt, was der Link bietet. |
url |
Die URL des Links. |
LocalizedMessage
Stellt eine lokalisierte Fehlermeldung bereit, die sicher an den Nutzer zurückgegeben werden kann und an einen RPC-Fehler angehängt werden kann.
| Felder | |
|---|---|
locale |
Das verwendete Gebietsschema gemäß der Spezifikation unter https://www.rfc-editor.org/rfc/bcp/bcp47.txt. Beispiele: „en-US“, „fr-CH“, „es-MX“ |
message |
Die übersetzte Fehlermeldung in der Sprache oben. |
PreconditionFailure
Beschreibt, welche Vorbedingungen nicht erfüllt wurden.
Wenn ein RPC beispielsweise fehlgeschlagen ist, weil die Nutzungsbedingungen bestätigt werden mussten, könnte der Verstoß gegen die Nutzungsbedingungen in der PreconditionFailure-Meldung aufgeführt werden.
| Felder | |
|---|---|
violations[] |
Beschreibt alle Verstöße gegen die Vorbedingungen. |
Verstoß
Ein Nachrichtentyp, der verwendet wird, um einen einzelnen Fehler bei einer Vorbedingung zu beschreiben.
| Felder | |
|---|---|
type |
Der Typ von PreconditionFailure. Wir empfehlen, einen dienstspezifischen Enum-Typ zu verwenden, um die unterstützten Themen für Precondition-Verstöße zu definieren. Beispiel: „NUB“ für „Verstoß gegen die Nutzungsbedingungen“. |
subject |
Das Subjekt, das je nach Typ fehlgeschlagen ist. Beispiel: „google.com/cloud“ relativ zum Typ „Nutzungsbedingungen“ gibt an, auf welche Nutzungsbedingungen verwiesen wird. |
description |
Eine Beschreibung, wie die Voraussetzung fehlgeschlagen ist. Anhand dieser Beschreibung können Entwickler nachvollziehen, wie sie den Fehler beheben können. Beispiel: „Nutzungsbedingungen nicht akzeptiert“. |
QuotaFailure
Beschreibt, wie eine Kontingentprüfung fehlgeschlagen ist.
Wenn beispielsweise ein Tageslimit für das aufrufende Projekt überschritten wurde, könnte ein Dienst mit einem QuotaFailure-Detail antworten, das die Projekt-ID und die Beschreibung des überschrittenen Kontingentlimits enthält. Wenn der Dienst im aufrufenden Projekt in der Entwicklerkonsole nicht aktiviert ist, kann ein Dienst mit der Projekt-ID antworten und service_disabled auf „true“ setzen.
Weitere Informationen zur Behandlung von Kontingentfehlern finden Sie auch unter „RetryInfo“ und „Help“.
| Felder | |
|---|---|
violations[] |
Beschreibt alle Kontingentüberschreitungen. |
Verstoß
Ein Nachrichtentyp, der zur Beschreibung eines einzelnen Kontingentverstoßes verwendet wird. Beispiel: Ein Tageskontingent oder ein benutzerdefiniertes Kontingent wurde überschritten.
| Felder | |
|---|---|
subject |
Das Subjekt, bei dem die Kontingentprüfung fehlgeschlagen ist. Beispiel: „clientip: |
description |
Eine Beschreibung, wie die Kontingentprüfung fehlgeschlagen ist. Clients können anhand dieser Beschreibung mehr über die Kontingentkonfiguration in der öffentlichen Dokumentation des Dienstes erfahren oder das entsprechende Kontingentlimit finden, das über die Entwicklerkonsole angepasst werden soll. Beispiel: „Service disabled“ (Dienst deaktiviert) oder „Daily Limit for read operations exceeded“ (Tägliches Limit für Lesevorgänge überschritten). |
api_service |
Der API-Dienst, aus dem Wenn die aufgerufene API beispielsweise die Kubernetes Engine API (container.googleapis.com) ist und ein Kontingentverstoß in der Kubernetes Engine API selbst auftritt, wäre dieser Wert „container.googleapis.com“. Wenn der Kontingentverstoß hingegen auftritt, wenn die Kubernetes Engine API VMs in der Compute Engine API (compute.googleapis.com) erstellt, ist in diesem Feld „compute.googleapis.com“ angegeben. |
quota_metric |
Der Messwert des verletzten Kontingents. Ein Kontingentmesswert ist ein benannter Zähler zum Messen der Nutzung, z. B. API-Anfragen oder CPUs. Wenn in einem Dienst eine Aktivität stattfindet, z. B. die Zuweisung einer virtuellen Maschine, können ein oder mehrere Kontingentmesswerte betroffen sein. Beispiele: „compute.googleapis.com/cpus_per_vm_family“, „storage.googleapis.com/internet_egress_bandwidth“. |
quota_id |
Die ID des verletzten Kontingents. Dies ist die eindeutige Kennung eines Kontingents im Kontext eines API-Dienstes. Sie wird auch als „Name des Limits“ bezeichnet. Beispiel: „CPUS-PER-VM-FAMILY-per-project-region“. |
quota_dimensions |
Die Dimensionen des überschrittenen Kontingents. Jedes nicht globale Kontingent wird für eine Reihe von Dimensionen durchgesetzt. Mit dem Kontingentmesswert wird definiert, was gezählt werden soll, und mit den Dimensionen wird angegeben, für welche Aspekte der Zähler erhöht werden soll. Das Kontingent „CPUs pro Region und VM-Familie“ erzwingt beispielsweise ein Limit für den Messwert „compute.googleapis.com/cpus_per_vm_family“ für die Dimensionen „region“ und „vm_family“. Wenn der Verstoß in der Region „us-central1“ und für die VM-Familie „n1“ aufgetreten ist, wären die quota_dimensions { "region": "us-central1", "vm_family": "n1", } Wenn ein Kontingent global erzwungen wird, sind die quota_dimensions immer leer. |
quota_value |
Der erzwungene Kontingentwert zum Zeitpunkt des Wenn der erzwungene Kontingentwert zum Zeitpunkt des |
future_quota_value |
Der neue Kontingentwert, der zum Zeitpunkt des Verstoßes eingeführt wird. Nach Abschluss des Roll-outs wird dieser Wert anstelle von „quota_value“ erzwungen. Wenn zum Zeitpunkt des Verstoßes kein Roll-out läuft, ist dieses Feld nicht festgelegt. Wenn zum Zeitpunkt des Verstoßes beispielsweise ein Roll-out im Gange ist, bei dem das Kontingent für die Anzahl der CPUs von 10 auf 20 geändert wird, ist 20 der Wert dieses Felds. |
RequestInfo
Enthält Metadaten zur Anfrage, die Clients beim Melden eines Fehlers oder bei anderen Formen von Feedback anhängen können.
| Felder | |
|---|---|
request_id |
Ein undurchsichtiger String, der nur von dem Dienst interpretiert werden sollte, der ihn generiert. Sie kann beispielsweise verwendet werden, um Anfragen in den Logs des Dienstes zu identifizieren. |
serving_data |
Alle Daten, die zur Bearbeitung dieser Anfrage verwendet wurden. Zum Beispiel ein verschlüsselter Stacktrace, der zur Fehlerbehebung an den Dienstanbieter zurückgesendet werden kann. |
ResourceInfo
Beschreibt die Ressource, auf die zugegriffen wird.
| Felder | |
|---|---|
resource_type |
Ein Name für den Ressourcentyp, auf den zugegriffen wird, z.B. "sql-Tabelle", "cloud storage bucket", "file", "Google calendar"; oder die Typ-URL der Ressource: z.B. „type.googleapis.com/google.pubsub.v1.Topic“. |
resource_name |
Der Name der Ressource, auf die zugegriffen wird. Beispiel: Der Name eines freigegebenen Kalenders: „beispiel.de_4fghdhgsrgh@group.calendar.google.com“, wenn der aktuelle Fehler |
owner |
Der Inhaber der Ressource (optional). Beispiel: „user: |
description |
Beschreibt, welcher Fehler beim Zugriff auf diese Ressource aufgetreten ist. Wenn Sie beispielsweise ein Cloud-Projekt aktualisieren möchten, benötigen Sie möglicherweise die Berechtigung |
RetryInfo
Beschreibt, wann Clients eine fehlgeschlagene Anfrage wiederholen können. Clients können die Empfehlung hier ignorieren oder es noch einmal versuchen, wenn diese Informationen in Fehlerantworten fehlen.
Es wird immer empfohlen, dass Clients beim Wiederholen den exponentiellen Backoff verwenden.
Clients sollten mit dem Wiederholungsversuch warten, bis retry_delay Zeit seit dem Empfang der Fehlerantwort vergangen ist. Wenn auch das Wiederholen von Anfragen fehlschlägt, sollten Clients ein exponentielles Backoff-Schema verwenden, um die Verzögerung zwischen Wiederholungen basierend auf retry_delay schrittweise zu erhöhen, bis entweder eine maximale Anzahl von Wiederholungen oder eine maximale Wiederholungsverzögerung erreicht wurde.
| Felder | |
|---|---|
retry_delay |
Clients sollten mindestens so lange warten, bevor sie dieselbe Anfrage noch einmal senden. |
Status
Mit dem Typ Status wird ein logisches Fehlermodell definiert, das für verschiedene Programmierumgebungen wie REST APIs und RPC APIs geeignet ist. Dieses Modell wird von gRPC verwendet. Jede Status-Meldung enthält die folgenden drei Datenelemente: Fehlercode, Fehlermeldung und Fehlerdetails.
Weitere Informationen zu diesem Fehlermodell und zur Arbeit damit finden Sie in der API-Designanleitung.
| Felder | |
|---|---|
code |
Der Statuscode, der idealerweise ein ENUM-Wert von |
message |
Eine an Entwickler gerichtete Fehlermeldung, die englischsprachig sein sollte. Jede für Nutzer sichtbare Fehlermeldung sollte lokalisiert und im Feld |
details[] |
Eine Auflistung aller Meldungen, die die Fehlerdetails enthalten. Es gibt einen allgemeinen Satz von Nachrichtentypen, die von APIs verwendet werden können. |