Fehler
Referenz zum Fehlerformat der REST-API, zu ihren Status- und Fehlercodes, zur Ratenbegrenzung und zu Fehlern, die Sie gefahrlos wiederholen können.
Wenn eine Anfrage fehlschlägt, gibt die API einen HTTP-Fehlerstatus und einen JSON-Body zurück, der den Fehler beschreibt. Diese Referenz führt das Format, die Codes und ihre Behandlung auf.
Fehlerformat
{
"code": "VALIDATION_FAILED",
"message": "2 fields failed validation: name, sizeGb",
"field": "name",
"details": {
"errors": [
{ "field": "name", "code": "string_too_short", "message": "String should have at least 1 character" },
{ "field": "sizeGb", "code": "missing", "message": "Field required" }
]
}
}| Feld | Vorhanden | Bedeutung |
|---|---|---|
code | Immer | Ein maschinenlesbarer Fehlercode aus den Tabellen unten. Verzweigen Sie anhand dieses Felds. |
message | Immer | Eine Beschreibung auf Englisch für Menschen. Werten Sie sie nicht maschinell aus; verwenden Sie in Ihrem Programm code. |
field | Wenn sich der Fehler auf ein einzelnes Feld der Anfrage bezieht | Der Name dieses Felds, z. B. name oder Idempotency-Key. |
details | Wenn es weiteren Kontext gibt | Strukturierte Daten, die vom Code abhängen, z. B. die Liste der Ressourcen, die ein Löschen blockieren. |
retryable | Nur wenn sein Wert true ist | Das erneute Senden der identischen Anfrage kann erfolgreich sein. Wenn das Feld fehlt, ist es false. |
Die API verwendet 400 Bad Request nicht: Eine Anfrage, die nicht dem Schema des Vorgangs entspricht, gibt 422 Unprocessable Entity zurück.
Statuscodes und Fehlercodes
| Status | Code | Bedeutung | Vorgehen |
|---|---|---|---|
400 | IDEMPOTENCY_KEY_REQUIRED | Eine Anfrage mit POST, die eine Ressource erstellt und mit einem API-Token oder einem Dienstkontoschlüssel gesendet wird, hat keinen Header Idempotency-Key. | Senden Sie den Header mit einer neuen UUID und bei einer Wiederholung mit derselben UUID. Siehe Idempotente Anfragen. |
401 | UNAUTHENTICATED | Die Anmeldedaten fehlen, sind falsch, abgelaufen oder widerrufen. | Prüfen Sie den Header Authorization. Siehe Mit API-Tokens authentifizieren. |
403 | FORBIDDEN | Sie dürfen das nicht tun. details.reason gibt, sofern vorhanden, den Grund an. | Siehe Problembehandlung. |
403 | MFA_STEP_UP_REQUIRED | Der Vorgang erfordert eine aktuelle Zwei-Faktor-Bestätigung in Ihrer Konsolensitzung. | Bestätigen Sie in der Konsole mit Ihrer Authenticator-App, und versuchen Sie es erneut. |
403 | MFA_SETUP_REQUIRED | Der Vorgang erfordert Zwei-Faktor-Authentifizierung, und Ihr Konto hat keine eingerichtet. | Richten Sie die Zwei-Faktor-Authentifizierung ein. |
403 | INTERACTIVE_SESSION_REQUIRED | Der Vorgang kann nicht mit einem API-Token oder einem Dienstkontoschlüssel ausgeführt werden. | Führen Sie ihn in der Konsole aus. |
404 | NOT_FOUND | Die Ressource existiert nicht, oder Sie haben keinen Zugriff darauf. Die API unterscheidet diese beiden Fälle nicht. | Prüfen Sie die ID und das Projekt. |
405 | METHOD_NOT_ALLOWED | Der Pfad existiert, aber nicht mit dieser Methode. | Prüfen Sie die Methode in der API-Referenz. |
409 | CONFLICT | Die Anfrage steht im Konflikt mit dem aktuellen Status, z. B. ein bereits vergebener Name oder eine bereits laufende Aktion. | Lesen Sie die Ressource, und lösen Sie den Konflikt. Wenn retryable true ist, versuchen Sie es später erneut. |
409 | QUOTA_EXCEEDED | Die Anfrage würde ein Kontingent Ihres Abonnements oder ein Produktlimit überschreiten, z. B. die Anzahl der Schlüssel eines Dienstkontos. Bei einem Kontingent des Abonnements nennt die Meldung die Ressource, ihr Limit und ihre Nutzung sowie die Kontingent-ID. | Geben Sie Ressourcen frei. Bei einem Kontingent des Abonnements können Sie auch eine Erhöhung beantragen. Siehe Kontingente. |
409 | CAPACITY_UNAVAILABLE | Die Region kann die Anfrage derzeit nicht platzieren. | Versuchen Sie es später erneut, oder wählen Sie eine andere Größe. Dieser Fehler ist wiederholbar. |
409 | DEPENDENCY_BLOCKED | Andere Ressourcen hängen von dieser ab. details listet sie auf, z. B. die Instanz, an die ein Volume angehängt ist. | Entfernen Sie zuerst die Abhängigkeiten. |
409 | LOCKED | Die Ressource kann nicht geändert werden, z. B. eine integrierte Rolle. | Nichts; die Ressource bleibt, wie sie ist. |
409 | DELETION_PROTECTED | Der Löschschutz ist aktiviert. | Deaktivieren Sie den Löschschutz, und löschen Sie erneut. |
409 | ROOT_VOLUME_WOULD_BE_DELETED, ATTACHED_VOLUME_WOULD_BE_DELETED | Das Löschen der Instanz würde auch ein Volume löschen, das erhalten bleiben muss, daher hat die Plattform das Löschen abgelehnt. | Siehe Probleme mit virtuellen Maschinen beheben. |
412 | PRECONDITION_FAILED | Der Wert von If-Match stimmt nicht mit der aktuellen Version der Ressource überein, oder ein erforderlicher Header If-Match fehlt. | Lesen Sie die Ressource erneut, und wiederholen Sie die Änderung mit ihrem neuen ETag. |
422 | VALIDATION_FAILED | Die Anfrage ist nicht gültig. field und details.errors nennen die Probleme. | Korrigieren Sie die Anfrage. Siehe Validierungsfehler. |
429 | RATE_LIMITED | Sie haben zu viele Anfragen gesendet. | Warten Sie die Anzahl der Sekunden im Header Retry-After ab. Siehe Ratenbegrenzung. |
500 | INTERNAL | Ein unerwarteter Fehler ist aufgetreten. | Versuchen Sie es später erneut. Wenn der Fehler bestehen bleibt, melden Sie ihn mit der X-Request-Id. |
502 | PROVIDER_ERROR | Die Cloud hat die Arbeit angenommen, und sie ist dort fehlgeschlagen, z. B. bei einem Abbild, das nicht booten kann. Der Fehler ist nicht als wiederholbar gekennzeichnet. | Lesen Sie die Meldung, und ändern Sie die Anfrage. |
502 | INTERNAL mit "retryable": true | Das API-Gateway konnte einen Dienst nicht erreichen. | Wiederholen Sie die Anfrage mit Backoff. |
503 | PROVIDER_UNAVAILABLE | Ein Clouddienst ist vorübergehend nicht erreichbar. | Wiederholen Sie die Anfrage mit Backoff. Dieser Fehler ist wiederholbar. |
Einige Anfragen geben auch 404 Not Found für eine Funktion zurück, die die Region nicht anbietet, z. B. wenn Sie Verschlüsselung im Ruhezustand anfordern, wo die Region sie nicht bereitstellen kann. Die Meldung nennt die Funktion und die Region. Eine Wiederholung kann diese Antwort nicht ändern.
Importierte Projekte
Diese Codes treten nur bei Projekten auf, die der Plattformbetreiber mit ihren vorhandenen Ressourcen für Sie importiert hat:
| Status | Code | Bedeutung |
|---|---|---|
409 | IMPORTED_PROJECT_ACK_REQUIRED | Das Löschen des Projekts löscht die Ressourcen, die mit dem Import übernommen wurden. Die Anfrage muss acknowledgeImportedProjectDestruction auf true setzen, um das zu bestätigen. |
403 | IMPORTED_PROJECT_PROTECTED | Für einen Zeitraum nach dem Import können Sie das Projekt nicht löschen. details.protectedUntil gibt an, bis wann. |
409 | IMPORTED_PROJECT_IMPORT_INCOMPLETE | Der Import ist nicht abgeschlossen, daher kann das Projekt nicht gelöscht werden. |
409 | IMPORTED_PROJECT_RELEASE_IN_PROGRESS | Der Betreiber gibt das Projekt frei, oder eine Freigabe ist fehlgeschlagen. |
409 | IMPORTED_BACKUP_PLAN_READ_ONLY | Der Backup-Plan enthält die Backups, die mit dem Import übernommen wurden. Sie können ihn lesen und daraus wiederherstellen, aber nicht ändern. |
Validierungsfehler
Eine Antwort 422 Unprocessable Entity für eine ungültige Anfrage listet alle Probleme auf einmal in details.errors auf. Jeder Eintrag hat:
field: den Pfad des Felds in der Anfrage, mit Punkten zwischen den Ebenen, odernull, wenn das Problem den Body als Ganzes betrifft.code: die Art des Problems, z. B.missingoderstring_too_short.message: eine Beschreibung auf Englisch.
Das field der obersten Ebene beschreibt den ersten Eintrag, und message nennt jedes Feld. Korrigieren Sie alle aufgeführten Felder, bevor Sie die Anfrage erneut senden.
Ratenbegrenzung
Das API-Gateway begrenzt, wie schnell Anfragen mit einzelnen Anmeldedaten gesendet werden können. Jedes API-Token, jeder Dienstkontoschlüssel und jede Konsolensitzung hat ein eigenes Limit, und Anfragen ohne Anmeldedaten werden nach Quell-IP-Adresse begrenzt. Das Limit erlaubt kurze Spitzen über der dauerhaften Rate.
Für ein API-Token oder einen Dienstkontoschlüssel gilt das Limit pro Anmeldedaten und zusätzlich pro Mandant, über alle Anmeldedaten des Mandanten zusammen. Jede Antwort auf eine solche Anfrage enthält diese Header:
| Header | Wert |
|---|---|
X-RateLimit-Limit | Die Anzahl der Anfragen, die das aktuelle Zeitfenster erlaubt. |
X-RateLimit-Remaining | Die Anzahl der Anfragen, die im aktuellen Zeitfenster übrig sind. |
X-RateLimit-Reset | Die Anzahl der Sekunden, bis das Zeitfenster zurückgesetzt wird, mindestens 1. |
Wenn Sie das Limit überschreiten, antwortet das Gateway mit 429 Too Many Requests, dem Code RATE_LIMITED, "retryable": true und einem Header Retry-After mit der Anzahl der zu wartenden Sekunden, mindestens 1. Warten Sie mindestens so lange, bevor Sie die nächste Anfrage senden.
Dieses Limit gilt für Anfragen an die REST-API. Die Limits von Anwendungs-Credentials finden Sie unter Limits der OpenStack-API.
Fehler in asynchronen Vorgängen
Wenn die Arbeit einer Anfrage mit 202 Accepted fehlschlägt, wird der state des Vorgangs zu FAILED, und sein Feld error enthält einen Fehler im obigen Format. Ein erfolgreicher Vorgang kann eine warning im selben Format enthalten, wenn etwas, das Sie angefordert haben, nicht geliefert werden konnte. Siehe Synchrone und asynchrone Anfragen.
Antworten aus dem Netzwerk vor der API
Während die Plattform aktualisiert wird, kann ein Proxy vor der API mit 500, 502, 503 oder 504 und einem Body antworten, der nicht dem obigen Fehlerformat entspricht, z. B. mit reinem Text. Eine solche Antwort bedeutet, dass Ihre Anfrage die API nicht erreicht hat. Wiederholen Sie sie mit Backoff und demselben Idempotency-Key.
Anfragen nach Fehlern wiederholen
- Wiederholen Sie die Anfrage, wenn die Antwort
"retryable": trueenthält, und nach einer Antwort500,502,503oder504, die nicht im Fehlerformat vorliegt. Senden Sie denselbenIdempotency-Keyerneut. Siehe Idempotente Anfragen. - Warten Sie vor jeder Wiederholung länger, z. B. 1, 2, 4 und dann 8 Sekunden. Warten Sie nach einer Antwort
429mindestens die Zeit ausRetry-After. - Wiederholen Sie andere
4xx-Fehler nicht unverändert. Korrigieren Sie zuerst die Anfrage, die Anmeldedaten oder den Status der Ressource.