GH GambleHub

API-Fehlercodes und Best Practices

1) Warum Fehler standardisieren

Vorhersagbarkeit für Kunden: Einheitliches Format und Retracement-Verhalten.
Debag-Beschleunigung: 'trace _ id '/' request _ id', stabile' error _ code'.
Sicherheit: SQL/Stack Traces/Configs werden nicht durchgesickert.
Beobachtbarkeit: Berichterstattung über die Fehlertaxonomie (Validierung, Quoten, Timeouts usw.).

2) Grundprinzipien

1. Einheitliches Antwortformat für alle 4xx/5xx (und für 2xx mit Teilfehlern - separates Schema).
2. Klare HTTP-Semantik: Der richtige Status ist am wichtigsten.
3. Zwei Codeebenen: Transport ('status') und Domain stable' error _ code'.
4. Retriable vs Non-retriable: Zeigen Sie explizit an und geben Sie einen Hinweis auf das Back-off.
5. Standard-Sicherheit: Details - nur für Kunden mit Rechten; ohne interne Spuren.
6. Lokalisierung: Maschinencode bleibt stabil, Text ist übersetzbar.

3) Einheitliches Fehlerformat (basierend auf RFC 7807)

Empfohlene JSON (erweitert 'application/problem + json'):
json
{
"type": "https://api. example. com/errors/validation_failed",
"title": "Validation failed",
"status": 422,
"error_code": "VAL_001",
"detail": "Field 'email' must be a valid address",
"instance": "req_01HZY...93",
"trace_id": "a1b2c3d4e5f6",
"retriable": false,
"errors": [
{"field": "email", "code": "email_invalid", "message": "Invalid email"}
],
"hint": "Fix payload and retry",
"meta": {"docs": "https://docs. example. com/errors#VAL_001"}
}

Obligatorisch: 'type', 'title', 'status', 'error _ code', 'trace _ id'.
Optional: 'errors []' (nach Feldern), 'retriable', 'hint', 'meta'.

Überschriften in der Antwort:
  • `Content-Type: application/problem+json`
  • `X-Request-ID`/`Traceparent` (W3C)
  • (für 429/503) „Retry-After“ (Sekunden oder Datum)

4) Semantik von HTTP-Status (Verschmelzung von „Klassik“ und Praxis)

2xx (Erfolg mit Nuancen)

200 OK ist der übliche Erfolg.
201 Erstellt - Eine Ressource (Standort) wurde erstellt.
202 Akzeptiert - asynchron in der Warteschlange (geben Sie' status _ url').
207 Multi-Status - Teilerfolg (wenn möglich vermeiden).

4xx (Client-Fehler)

400 Bad Request - Syntax/Format, aber keine Feldvalidierung (besser 422).
401 Unauthorized - kein/falsches Token. Lassen Sie uns „WWW-Authenticate“.
403 Forbidden - Der Token ist gültig, aber die Rechte fehlen (RBAC/ABAC/Limits).
404 Not Found - Ressource/Endpunkt fehlt.
409 Conflict ist ein Versions-/Zustandskonflikt (optimistic locking, idempotency).
410 Gone - Endpunkt für immer entfernt.
412 Precondition Failed - ETag/If-Match nicht bestanden.
415 Unsupported Media Type ist ein falscher 'Content-Type'.
422 Unprocessable Entity - Validierung von Geschäftsregeln.
429 Too Many Requests - Quoten/Geschwindigkeit überschritten (siehe § 7).

5xx (Serverfehler)

500 Interner Serverfehler - plötzlicher Fehler; Keine Details preisgeben.
502 Bad Gateway - Upstream-Fehler.
503 Service Unavailable - degradation/overload, give' Retry-After'.
504 Gateway Timeout ist ein Backend-Timeout.

💡 Schwelle: 4xx ist kein Retraim, 5xx kann retrayed werden (mit Backoff/Jitter), 429 ist retrayed nach 'Retry-After'.

5) Domain-Taxonomie' error _ code'

Wir empfehlen die Bereiche:
  • „AUTH _“ - Authentifizierung/Autorisierung.
  • 'VAL _' - Validierung der Eingabedaten.
  • „RATELIMIT _“ - Quoten und Geschwindigkeit.
  • „IDEMP _“ - Idempotenz/Duplikate.
  • 'CONFLICT _' - Versionen/Status.
  • 'DEP _' - Abhängigkeiten (PSP/DNS/SMTP).
  • „PAY _“ - Geschäftsfehler der Zahlungsdomäne.
  • „SEC _“ - Sicherheit (Signaturen, HMAC, mTLS).
  • „INT _“ - intern plötzlich.
Anforderungen:
  • Stabilität über die Zeit (Back-Compat).
  • Beschreibungen und Beispiele im Fehlerverzeichnis (docs + machine-readable JSON).

6) Retriable vs Non-retriable

Felder:
  • `retriable: true|false`
  • Wenn 'true' - unbedingt 'Retry-After' (in Sekunden) oder ein „exponentieller Back-off-Vertrag (ab 1-2 s, max 30-60 s)“.

Retriable ist in der Regel: '502/503/504', einige' 500', '429' (nach dem Fenster).
Non-retriable: `400/401/403/404/409/410/415/422`.

7) Rate Limit & Quota Fehler (429)

Körper:
json
{
"type": "https://api. example. com/errors/rate_limited",
"title": "Rate limit exceeded",
"status": 429,
"error_code": "RATELIMIT_RPS",
"detail": "Too many requests",
"retriable": true
}
Überschriften:
  • `Retry-After: 12`
  • `X-RateLimit-Limit`, `X-RateLimit-Remaining`, `X-RateLimit-Reset`
  • Для квот: `X-Quota-Limit`, `X-Quota-Remaining`, `X-Quota-Reset`

8) Idempotenz und Konflikte

In Schreibanfragen - „Idempotency-Key“ (einzigartig innerhalb von 24-72 Stunden).
Reoperation conflict → 409 Conflict with 'error _ code: "IDEMP_REPLAY"'.

ETag → 412 Precondition Failed

Fügen Sie in der Antwort 'resource _ id '/' status _ url' für eine sichere erneute Abfrage bei.

9) Validierung und 422

Geben Sie die Fehlerliste nach Feldern zurück:
json
{
"status": 422,
"error_code": "VAL_001",
"errors": [
{"field":"email","code":"email_invalid","message":"Invalid email"},
{"field":"age","code":"min","message":"Must be >= 18"}
]
}
Regeln:
  • Duplizieren Sie nicht das gleiche in 400 - 422 bevorzugt für Business-Validierung.
  • Nachrichten sind menschenlesbar; 'code' ist maschinell.

10) Fehlersicherheit

Nie: Stack-Traces, SQL, Dateipfade, private Hostnamen.
Bearbeiten Sie die PII; Beachten Sie die DSGVO/DSAR.
Für Signatur/NMAS: Unterscheiden Sie zwischen 'SEC _ SIGNATURE _ MISMATCH' (403) und 'SEC _ TIMESTAMP _ SKEW' (401/403) mit dem Hinweis' überprüfen Sie die Zeit ± 5 Minuten'.

11) Korrelation und Beobachtbarkeit

Fügen Sie immer 'trace _ id '/' X-Request-ID' hinzu und gehen Sie in die Protokolle/Tracks.
Die Fehler aggregieren Sie nach „error _ code“ und „status“ → dashboards „top bugs“, „new vs known“.
Alertas: 5xx/422/429 Spitze, p95 Latenz, Anteil von Fehlern.

12) gRPC/GraphQL/Webhooks - Muppings

gRPC ↔ HTTP

gRPCDie BedeutungHTTP
`OK`Der Erfolg200
`INVALID_ARGUMENT`Die Validation422/400
`UNAUTHENTICATED`kein Token401
`PERMISSION_DENIED`keine Rechte403
`NOT_FOUND`Keine Ressource404
`ALREADY_EXISTS`Der Konflikt409
`FAILED_PRECONDITION`ETag/Voraussetzungen412
`RESOURCE_EXHAUSTED`Die Quoten429
`UNAVAILABLE`Es ist unzugänglich503
`DEADLINE_EXCEEDED`Das Timeout504
`INTERNAL`Die Innere500

GraphQL

Transport 200, aber 'errors []' innen - fügen Sie' extensions. code` и `trace_id`.
Für „fatal“ (Authentifizierung/Quoten) ist eine echte HTTP- 401/403/429 besser.

Webhooks

Betrachten Sie nur 2xx des Empfängers als erfolgreich.
Retrays mit exponentiellem Backoff, 'X-Webhook-ID', 'X-Signatur'.
410 vom Empfänger - Stop Retrays (Endpunkt entfernt).

13) Fehlerversionierung

„type “/„ error _ code“ - stabil; neu - nur hinzufügen.
Wenn Sie das Körperschema ändern, erhöhen Sie die Minor-Version der API oder 'problem + json; v=2`.
Dokumentation: Codetabelle + Beispiele; changelog Fehler.

14) Dokumentation (OpenAPI Fragmente)

Globale Antworten

yaml components:
responses:
Problem:
description: Problem Details content:
application/problem+json:
schema:
$ref: '#/components/schemas/Problem'
schemas:
Problem:
type: object required: [type, title, status, error_code, trace_id]
properties:
type: { type: string, format: uri }
title: { type: string }
status: { type: integer }
error_code: { type: string }
detail: { type: string }
instance: { type: string }
trace_id: { type: string }
retriable: { type: boolean }
errors:
type: array items:
type: object properties:
field: { type: string }
code: { type: string }
message: { type: string }

Endpoint-Beispiel

yaml paths:
/v1/users:
post:
responses:
'201': { description: Created }
'401': { $ref: '#/components/responses/Problem' }
'422': { $ref: '#/components/responses/Problem' }
'429': { $ref: '#/components/responses/Problem' }
'500': { $ref: '#/components/responses/Problem' }

15) Prüfung und Qualität

Vertragstests: Konformität 'application/problem + json', Pflichtfelder.
Negative Tests: alle 401/403/404/ 409/422/429/500 Zweige.
Chaos/Latenz: Überprüfen Sie die Retrays auf 5xx/ 503/504/429 („Retry-After“).
Sicherheitstests: keine internen Meldungen, korrekte PII-Maske.
Backward-compat: Alte Kunden verstehen die neuen Felder (hinzufügen, nicht brechen).

16) Checkliste Umsetzung

  • Ein einziges' Problem + json'+ stabiler 'error _ code'.
  • Korrekte HTTP/gRPC/GraphQL Semantik.
  • Retriable/non-retriable + 'Retry-After '/Backoff-Empfehlungen.
  • Rate-Limit Überschriften und 429 Verhalten.
  • Idempotency („Idempotency-Key“, 409/412).
  • Sicherheit: keine Stack-Spuren/Geheimnisse, PII-Revision.
  • 'trace _ id '/' X-Request-ID' in allen Fehlern.
  • Dokumentation des Fehlerkatalogs und Beispiele.
  • Überwachung durch Fehlertaxonomie.
  • Autotests negativer Szenarien.

17) Mini-FAQ

Was unterscheidet 400 von 422?
400 ist eine gebrochene Abfrage (Syntax/Inhaltstyp). 422 ist in der Syntax gültig, aber die Geschäftsregeln haben nicht bestanden.

Wann 401 und wann 403?
401 - kein/falscher Token; 403 - der Token ist da, die Rechte fehlen.

Brauche ich immer 'Retry-After'?
Für 429/503 ja; für den Rest retriable - es ist wünschenswert, eine explizite Empfehlung zu geben.

Summe

Gut gestaltete Fehler sind ein Vertrag: korrekter HTTP-Status, ein einziges' Problem + json', stabiler 'error _ code', explizite Hinweise auf Retraits und strenge Sicherheit. Standardisieren Sie das Format, dokumentieren Sie die Taxonomie, fügen Sie Telemetrie und Tests hinzu - und Ihre API wird vorhersehbar, sicher und integratorfreundlich.

Contact

Kontakt aufnehmen

Kontaktieren Sie uns bei Fragen oder Support.Wir helfen Ihnen jederzeit gerne!

Telegram
@Gamble_GC
Integration starten

Email ist erforderlich. Telegram oder WhatsApp – optional.

Ihr Name optional
Email optional
Betreff optional
Nachricht optional
Telegram optional
@
Wenn Sie Telegram angeben – antworten wir zusätzlich dort.
WhatsApp optional
Format: +Ländercode und Nummer (z. B. +49XXXXXXXXX).

Mit dem Klicken des Buttons stimmen Sie der Datenverarbeitung zu.