Fehler

Fehler sind JSON wie alles andere, mit einem passenden HTTP-Status und einem Code, auf den Sie verzweigen können. Die Meldung ist ein Satz für Ihre Logs, nicht für Ihre Nutzer; ihr Wortlaut kann sich ändern, der Code nie.

Die Fehlerhülle

{
  "status": "error",
  "error": {
    "code": "invalid_request",
    "message": "Parameter 'lat' must be a number between -90 and 90.",
    "param": "lat"
  }
}

param ist vorhanden, wenn ein bestimmter Parameter das Problem verursacht hat. X-Request-Id wird auch bei Fehlerantworten gesetzt; geben Sie sie an, wenn Sie den Support kontaktieren.

Codes

HTTPcodeWannWas zu tun ist
400invalid_requestEin Pflichtparameter fehlt, ein Wert ist fehlerhaft oder außerhalb des gültigen Bereichs, mehr als 100 Punkte oder Adressen in einem Batch, mehr als 10 angeforderte Ergebnisse.Korrigieren Sie die Anfrage. Nicht unverändert wiederholen.
401missing_keyEs wurde kein Schlüssel gesendet, und der Zugang ohne Schlüssel ist auf diesem Server abgeschaltet. Standardmäßig ist er eingeschaltet, und eine Anfrage ohne Schlüssel wird einfach beantwortet.Senden Sie einen Schlüssel als X-API-Key, als Bearer-Token oder als key=.
429quota_exceededDie Adresse hat ihre 2.500 kostenlosen Anfragen für heute ohne Schlüssel aufgebraucht.Warten Sie auf das Zurücksetzen (Retry-After und X-Quota-Reset sagen, wann), oder senden Sie einen Schlüssel mit Guthaben oder einem Unlimited-Paket.
401invalid_keyDer Schlüssel existiert nicht.Prüfen Sie auf Tippfehler oder eine unvollständige Kopie.
401key_revokedDer Schlüssel wurde im Dashboard widerrufen.Verwenden Sie einen aktuellen Schlüssel.
402no_creditsDas kostenlose Tageskontingent des Schlüssels ist aufgebraucht und das Guthaben des Kontos ist leer.Laden Sie im Dashboard Guthaben auf, per Karte oder Krypto, oder warten Sie auf das Zurücksetzen.
403key_ip_limitAlle IP-Plätze dieses Schlüssels sind vorerst von anderen Adressen belegt.Verwenden Sie einen der Rechner, die einen Platz belegen, geben Sie diesem Rechner einen eigenen Schlüssel oder fügen Sie ein Paket hinzu. Siehe IP-Plätze.
403account_suspendedDas Konto ist gesperrt.Prüfen Sie Ihre E-Mails von uns oder eröffnen Sie ein Ticket.
404not_foundDer Pfad existiert nicht. Eine Abfrage ohne Treffer ist 200 mit leeren Ergebnissen, nicht 404.Prüfen Sie den Pfad und das Versionspräfix.
500server_errorAuf unserer Seite ist etwas kaputtgegangen.Nach einer Sekunde einmal wiederholen. Der Fehler wird protokolliert und alarmiert uns. Wird nicht gezählt.
503unavailableEin Backend ist vorübergehend nicht verfügbar.Mit Backoff wiederholen. Wird nicht gezählt.

Was keine Fehler sind

Fehler auf den Drop-in-Hosts

Die Kompatibilitäts-Hosts geben Fehler in der Struktur zurück, die der ursprüngliche Anbieter verwendet, sodass die bestehende Fehlerbehandlung funktioniert. Zum Beispiel ist ein leeres Guthaben "status": "OVER_QUERY_LIMIT" mit HTTP 200 auf gapi.mygeocode.com, "statusCode": 429 in der Bing-Hülle auf bing.mygeocode.com und {"status":"fail","message":"quota"} auf ipapi.mygeocode.com; ein ungültiger Schlüssel ist jeweils REQUEST_DENIED, 401 und invalid key. Die Header X-Quota-* werden trotzdem auf jedem Host gesendet, sodass Sie den tatsächlichen Stand aus den Headern lesen können, wenn Sie möchten.

Eine sinnvolle Strategie zur Fehlerbehandlung

def call(url, params, tries=3):
    for attempt in range(tries):
        r = session.get(url, params=params, timeout=10)
        if r.status_code == 200:
            return r.json()
        body = r.json()
        code = body["error"]["code"]
        if r.status_code in (500, 503):
            time.sleep(0.2 * (2 ** attempt))
            continue
        # no_credits, key_ip_limit, invalid_request, invalid_key: retrying will not help
        raise ApiError(code, body["error"]["message"], r.headers.get("X-Request-Id"))
    raise ApiError("retries_exhausted", "Gave up after %d attempts" % tries, None)