Save up to 17% with yearly billing

See pricing

Fehlerbehandlung

Caching und Kontingente: Caching & Monitoring.

Plattformfehler (401, 403, 422, 429, 5xx, Wiederholungsversuche/Backoff, Rate-Limit-Header): Fehlerbehandlung.

Beispiele für endpoint-spezifische 404-Fehler: METAR · TAF · Höhenwinde.

Wenn Wetterdaten fehlen

Zwei unterschiedliche 404-Fälle - gleicher HTTP-Status und gleiche JSON-Struktur ({ "detail": "..." }), aber unterschiedliche Bedeutung:

METAR 404. Für diesen ICAO-Code gibt es keine Wetterbeobachtungsstation. Das ist häufig bei privaten Landeplätzen, vielen Militärflugplätzen und einigen internationalen Flughäfen der Fall, die nicht an das ASOS/AWOS-Netz melden. Der Flughafen kann trotzdem existieren - er meldet lediglich keine METARs. Zeigen Sie Wetter nicht verfügbar an und lassen Sie Benutzer gegebenenfalls fortfahren.

TAF 404. Der Flughafen hat möglicherweise ein METAR, aber es wird kein TAF herausgegeben. Kleinere Flughäfen ohne nennenswerten Instrumentenflugverkehr haben oft nur ein METAR. Rufen Sie das METAR wie gewohnt ab, überspringen Sie das TAF und zeigen Sie nur die aktuellen Bedingungen an.

import requests

HEADERS = {
    "X-RapidAPI-Key": "YOUR_RAPIDAPI_KEY",
    "X-RapidAPI-Host": "skylink-api.p.rapidapi.com",
}
BASE = "https://skylink-api.p.rapidapi.com"


def get_weather(icao: str) -> dict:
    """
    Returns a dict with 'metar' and 'taf' keys.
    Either can be None if data is unavailable for this airport.
    """
    result = {"metar": None, "taf": None}

    r = requests.get(f"{BASE}/weather/metar/{icao}", headers=HEADERS, params={"parsed": "true"}, timeout=(10, 15))
    if r.status_code == 200:
        result["metar"] = r.json()
    elif r.status_code != 404:
        r.raise_for_status()

    r = requests.get(f"{BASE}/weather/taf/{icao}", headers=HEADERS, params={"parsed": "true"}, timeout=(10, 15))
    if r.status_code == 200:
        result["taf"] = r.json()
    elif r.status_code != 404:
        r.raise_for_status()

    return result


# weather = get_weather("KOXB")  # small airport, no TAF
# print("METAR:", "available" if weather["metar"] else "not available")
# print("TAF:",   "available" if weather["taf"]   else "not available")

Stellen Sie verfügbare METAR/TAF-Daten dar und kennzeichnen Sie Lücken ausdrücklich (zum Beispiel „Keine Vorhersage für diesen Flughafen“). Ein Wetter-404 bedeutet, dass das Produkt für diesen ICAO-Code nicht veröffentlicht wird, und nicht, dass ein Fehler im Client vorliegt.

Für vorübergehende Fehler (429, 5xx) verwenden Sie die Hilfsfunktion für Wiederholungsversuche unter Fehlerbehandlung.

En-Route-Endpoints (bbox)

Höhenwinde, PIREPs und AIRMET/SIGMET verwenden eine bbox-Abfrage - keinen einzelnen ICAO-Code. Die Fehlersemantik unterscheidet sich von METAR/TAF:

EndpointLeeres Ergebnis404Hinweise
Höhenwinde-Keine FB-Stationen in der bboxNur US-Abdeckung - bbox erweitern oder Koordinaten prüfen
PIREPsreports: [], total: 0- (400 bei ungültiger bbox)Keine aktuellen Pilotenmeldungen - kein Fehler
AIRMET/SIGMETreports: [], total: 0- (400 bei ungültiger bbox)Keine aktiven Warnmeldungen - häufig bei VFR-Wetter
import requests

HEADERS = {
    "X-RapidAPI-Key": "YOUR_RAPIDAPI_KEY",
    "X-RapidAPI-Host": "skylink-api.p.rapidapi.com",
}
BASE = "https://skylink-api.p.rapidapi.com"
BBOX = "39,-80,42,-73"  # example corridor


def enroute_weather(bbox: str) -> dict:
    """Fetch en-route layers. Empty lists are valid - do not treat as failures."""
    out = {"winds": None, "pireps": [], "airsigmets": []}

    r = requests.get(
        f"{BASE}/weather/winds-aloft",
        headers=HEADERS,
        params={"bbox": bbox, "forecast": 12, "level": "low"},
        timeout=(10, 20),
    )
    if r.status_code == 200:
        out["winds"] = r.json()
    elif r.status_code != 404:
        r.raise_for_status()

    r = requests.get(
        f"{BASE}/weather/pireps",
        headers=HEADERS,
        params={"bbox": bbox, "hours": 3},
        timeout=(10, 20),
    )
    r.raise_for_status()
    out["pireps"] = r.json().get("reports") or []

    r = requests.get(
        f"{BASE}/weather/airsigmet",
        headers=HEADERS,
        params={"bbox": bbox, "type": "airmet"},
        timeout=(10, 25),
    )
    r.raise_for_status()
    out["airsigmets"] = r.json().get("reports") or []

    return out


# wx = enroute_weather(BBOX)
# print("Winds stations:", wx["winds"]["total"] if wx["winds"] else "none in bbox")
# print("PIREPs:", len(wx["pireps"]))
# print("AIRMETs:", len(wx["airsigmets"]))

Zeigen Sie in der UI ausdrückliche Leerzustände an („Keine Pilotenmeldungen in den letzten 3 h“, „Keine aktiven AIRMETs“) statt Fehlerbannern.


Siehe auch: METAR · TAF · Höhenwinde · PIREPs · AIRMET/SIGMET · Muster für den Produktivbetrieb · Anwendungsfälle am Flughafen · Anwendungsfälle auf der Strecke