In diesem Leitfaden wird erläutert, wie Sie mit Fehlern umgehen, die von der Merchant API zurückgegeben werden. Es ist wichtig, die Struktur und Stabilität der Fehlerantwort zu verstehen, um robuste Integrationen zu entwickeln, die sich automatisch von Fehlern erholen oder Nutzern aussagekräftiges Feedback geben können.
Übersicht
Wenn eine Merchant API-Anfrage fehlschlägt, gibt die API einen Standard-HTTP-Statuscode (4xx oder 5xx) und einen JSON-Antworttext mit Details zum Fehler zurück.
Die Merchant API folgt dem AIP-193-Standard für
Fehlerdetails und bietet maschinenlesbare Informationen, mit denen Ihre
Anwendung bestimmte Fehlerszenarien programmatisch verarbeiten kann.
Struktur der Fehlerantwort
Die Fehlerantwort ist ein JSON-Objekt, das Standardfelder wie code,
message, und status enthält. Außerdem enthält sie ein details-Array. Wenn Sie Fehler programmatisch verarbeiten möchten, suchen Sie in details nach einem Objekt, bei dem @type auf type.googleapis.com/google.rpc.ErrorInfo festgelegt ist.
Dieses ErrorInfo-Objekt enthält stabile, strukturierte Daten zum Fehler:
- domain: Die logische Gruppierung des Fehlers, in der Regel
merchantapi.googleapis.com. - metadata: Eine Map mit dynamischen Werten im Zusammenhang mit dem Fehler. Dazu gehören:
- REASON: Eine spezifische, stabile Kennung für den genauen Fehler (z.B.
INVALID_NAME_PART_NOT_NUMBER,PERMISSION_DENIED_ACCOUNTS). Dieses Feld ist immer vorhanden. Verwenden Sie dieses Feld für die detaillierte Fehlerbehandlung in Ihrer Anwendungslogik. - HELP_CENTER_LINK: Bietet zusätzlichen Kontext und Anleitungen zur Behebung des Problems. Dieses Feld ist nicht für alle Fehler vorhanden. Wir planen jedoch, die Abdeckung im Laufe der Zeit für die Fehler zu erweitern, bei denen mehr Kontext erforderlich ist.
- Andere dynamische Felder: Andere Schlüssel, die Kontext liefern, z. B. der Name
des ungültigen Felds (
FIELD_LOCATION) oder der Wert, der den Fehler verursacht hat (FIELD_VALUE).
- REASON: Eine spezifische, stabile Kennung für den genauen Fehler (z.B.
Beispiele für Fehlerantworten
Das folgende JSON zeigt die Struktur eines Merchant API-Fehlers, bei dem ein Ressourcenname falsch formatiert war.
{
"error": {
"code": 400,
"message": "[name] The part `account` of the resource name in field `name` must be a number, but has value: `abcd`.",
"status": "INVALID_ARGUMENT",
"details": [
{
"@type": "type.googleapis.com/google.rpc.ErrorInfo",
"reason": "invalid",
"domain": "merchantapi.googleapis.com",
"metadata": {
"VARIABLE_NAME": "account",
"FIELD_LOCATION": "name",
"FIELD_VALUE": "abcd",
"REASON": "INVALID_NAME_PART_NOT_NUMBER"
}
}
]
}
}
Hier ein Beispiel für einen Authentifizierungsfehler:
{
"error": {
"code": 401,
"message": "The caller does not have access to the accounts: [1234567]",
"status": "UNAUTHENTICATED",
"details": [
{
"@type": "type.googleapis.com/google.rpc.ErrorInfo",
"reason": "unauthorized",
"domain": "merchantapi.googleapis.com",
"metadata": {
"ACCOUNT_IDS": "[1234567]",
"REASON": "PERMISSION_DENIED_ACCOUNTS"
}
}
]
}
}
Stabilität von Fehlerfeldern
Beim Schreiben von Fehlerbehandlungslogik ist es wichtig zu wissen, auf welche Felder Sie sich verlassen können und welche sich ändern können.
- Stabile Felder :
details.metadata.REASON: Die spezifische Fehler-ID. Verlassen Sie sich bei der Logik für den Kontrollfluss Ihrer Anwendung auf dieses Feld.details.metadatakeys: Die Schlüssel in der Metadaten-Map (z.B.FIELD_LOCATION,ACCOUNT_IDS) sind stabil.code: Der HTTP-Statuscode auf hoher Ebene (z.B.400,401,503) ist stabil.
Instabile Felder :
message: Die für Menschen lesbare Fehlermeldung ist nicht stabil. Sie ist nur für das Debugging durch Entwickler vorgesehen. Schreiben Sie keinen Code, der den Textinhalt des Feldsmessageparst oder sich darauf verlässt. Er kann ohne Vorankündigung geändert werden, um die Klarheit zu verbessern oder Kontext hinzuzufügen.details.metadatavalues: Während die Schlüssel stabil sind, können sich die Werte für Informationsschlüssel ändern. Wenn beispielsweise einHELP_CENTER_LINK-Schlüssel angegeben wird, kann die URL, auf die er verweist, ohne vorherige Benachrichtigung auf eine neuere Dokumentationsseite aktualisiert werden. Wie bereits erwähnt, ist der Wert vondetails.metadata.REASONjedoch stabil.
Best Practices
Beachten Sie diese Best Practices, damit Ihre Integration Fehler ordnungsgemäß verarbeitet.
details.metadata.REASON für Logik verwenden
Verwenden Sie immer den spezifischen REASON in der metadata-Map, um die Ursache eines Fehlers zu ermitteln. Verlassen Sie sich nicht nur auf den HTTP-Statuscode, da mehrere Fehler denselben Statuscode haben können.
Fehlermeldung nicht parsen
Wie im Abschnitt zur Stabilität erwähnt, ist das Feld message für Menschen bestimmt.
Wenn Sie dynamische Informationen benötigen (z. B. welches Feld ungültig war), extrahieren Sie sie aus der metadata-Map mit stabilen Schlüsseln wie FIELD_LOCATION und VARIABLE_NAME.
Exponentiellen Backoff implementieren
Bei Fehlern, die auf eine vorübergehende Nichtverfügbarkeit oder eine Ratenbegrenzung hinweisen, sollten Sie eine exponentielle Backoff-Strategie implementieren. Das bedeutet, dass Sie vor dem Wiederholen eine kurze Zeit warten und die Wartezeit bei jedem nachfolgenden Fehler verlängern.
quota/request_rate_too_high: Dieser Fehler weist darauf hin, dass Sie Ihr Minutenkontingent für eine bestimmte Kontingentgruppe überschritten haben. Verringern Sie die Anfragerate.internal_error: Diese Fehler sind in der Regel vorübergehend. Wiederholen Sie den Vorgang mit exponentiellem Backoff. Hinweis: Wenninternal_errornach mehreren Wiederholungsversuchen mit Backoff weiterhin auftritt, lesen Sie den Abschnitt Merchant API-Support kontaktieren.
Merchant API-Support kontaktieren
Wenn Sie sich wegen eines bestimmten Fehlers an den Merchant API Support wenden müssen, geben Sie in Ihrer Anfrage die folgenden Informationen an:
- Die genaue Fehlerantwort, die Sie erhalten haben
- Der API-Methodenname
- Die Anfragenutzlast
- Zeitstempel oder der Zeitraum, in dem die Methode aufgerufen und Fehler empfangen wurden