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:
| Endpoint | Leeres Ergebnis | 404 | Hinweise |
|---|---|---|---|
| Höhenwinde | - | Keine FB-Stationen in der bbox | Nur US-Abdeckung - bbox erweitern oder Koordinaten prüfen |
| PIREPs | reports: [], total: 0 | - (400 bei ungültiger bbox) | Keine aktuellen Pilotenmeldungen - kein Fehler |
| AIRMET/SIGMET | reports: [], 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