Fehlerbehandlung
Caching und Kontingente: Caching & Monitoring.
Plattformfehler (401, 403, 422, 429, 5xx, Wiederholungsversuch/Backoff, Rate-Limit-Header): Fehlerbehandlung.
Fehlerbeispiele der Endpoints: Flughäfen · Flughafensuche · Navaids.
Flughafenabfrage (/airports/search)
Zwei unterschiedliche Ergebnisse — gleiche HTTP-Form ({ "detail": "..." }), unterschiedliche Bedeutung:
404 — ICAO nicht gefunden. Der Code ist unbekannt oder nicht in der Datenbank. Häufig bei privaten Landepisten, stillgelegten Flugplätzen und Tippfehlern. Zeigen Sie Flughafen nicht gefunden an und fordern Sie den Benutzer auf, den ICAO-Code zu überprüfen.
400 — weder ICAO noch IATA angegeben. Der Endpoint erfordert mindestens eine Kennung. Validieren Sie vor dem Aufruf — ein leerer Query-String erzeugt 400, nicht 404.
import os
import requests
HEADERS = {
"X-RapidAPI-Key": os.getenv("RAPIDAPI_KEY", "YOUR_RAPIDAPI_KEY"),
"X-RapidAPI-Host": "skylink-api.p.rapidapi.com",
}
BASE = "https://skylink-api.p.rapidapi.com"
def fetch_airport(icao: str) -> dict | None:
"""Return airport data or None on 404. Raises on any other error."""
if not icao:
raise ValueError("ICAO code is required")
r = requests.get(
f"{BASE}/airports/search",
headers=HEADERS,
params={"icao": icao},
timeout=(10, 15),
)
if r.status_code == 404:
return None
r.raise_for_status()
return r.json()Ein 404 bedeutet, dass der Flughafen nicht gefunden wurde — kein Fehler im Client. Zeigen Sie einen leeren Zustand an und lassen Sie den Benutzer es mit einem anderen Code erneut versuchen.
Textsuche (/airports/search/text)
| Bedingung | Verhalten |
|---|---|
| Suchbegriff kürzer als 2 Zeichen | 422 Unprocessable Entity |
| Gültiger Suchbegriff, keine Treffer | 200 mit airports: [] |
| Gültiger Suchbegriff, Treffer gefunden | 200 mit nach Relevanz sortiertem results-Array |
Eine leere airports-Liste ist kein Fehler — sie bedeutet, dass kein Flughafen zum Suchbegriff passte. Zeigen Sie einen Zustand „Keine Ergebnisse“ statt eines Fehlerbanners an.
def search_airports(query: str) -> list[dict]:
"""
Returns a list of matching airports (may be empty).
Raises ValueError for queries shorter than 2 characters.
"""
if len(query) < 2:
raise ValueError(f"Query must be at least 2 characters (got {len(query)!r})")
r = requests.get(
f"{BASE}/airports/search/text",
headers=HEADERS,
params={"q": query},
timeout=(10, 15),
)
r.raise_for_status()
return r.json().get("airports") or []Navaid-Abfrage (/navaids)
| Bedingung | Verhalten |
|---|---|
| Flughafen hat keine veröffentlichten Navaids | 200 mit navaids: [] |
| Ungültiger Begrenzungsrahmen | 400 |
Ein leeres navaids-Array ist normal — viele kleinere Flughäfen haben keine veröffentlichten Navaids. Zeigen Sie eine Anzahl von null statt eines Fehlers an.
def fetch_navaids(icao: str) -> list[dict]:
"""Returns navaids for an airport. Empty list is a valid result."""
r = requests.get(
f"{BASE}/navaids",
headers=HEADERS,
params={"airport": icao},
timeout=(10, 15),
)
r.raise_for_status()
return r.json().get("navaids") or []Lauffähiges Beispiel
import os
import requests
HEADERS = {
"X-RapidAPI-Key": os.getenv("RAPIDAPI_KEY", "YOUR_RAPIDAPI_KEY"),
"X-RapidAPI-Host": "skylink-api.p.rapidapi.com",
}
BASE = "https://skylink-api.p.rapidapi.com"
def fetch_airport(icao: str) -> dict | None:
r = requests.get(
f"{BASE}/airports/search",
headers=HEADERS,
params={"icao": icao},
timeout=(10, 15),
)
if r.status_code == 404:
return None
r.raise_for_status()
return r.json()
def search_airports(query: str) -> list[dict]:
if len(query) < 2:
print(f" [skip] query {query!r} is too short (min 2 chars)")
return []
r = requests.get(
f"{BASE}/airports/search/text",
headers=HEADERS,
params={"q": query},
timeout=(10, 15),
)
r.raise_for_status()
return r.json().get("airports") or []
def fetch_navaids(icao: str) -> list[dict]:
r = requests.get(
f"{BASE}/navaids",
headers=HEADERS,
params={"airport": icao},
timeout=(10, 15),
)
r.raise_for_status()
return r.json().get("navaids") or []
if __name__ == "__main__":
# 1. Fetch a known airport
airport = fetch_airport("KJFK")
if airport:
print(f"Airport: {airport.get('name')} ({airport.get('icao_code')})")
else:
print("Airport KJFK not found")
# 2. Try a 1-char query — gracefully skipped
results = search_airports("K")
print(f"1-char search results: {len(results)}")
# 3. Valid text search
results = search_airports("Kennedy")
print(f"Text search 'Kennedy': {len(results)} result(s)")
# 4. Fetch navaids — empty array is valid
navaids = fetch_navaids("KJFK")
print(f"Navaids at KJFK: {len(navaids)}")Für vorübergehende Fehler (429, 5xx) verwenden Sie den Retry-Helper unter Fehlerbehandlung.
Siehe auch: Flughäfen · Flughafensuche · Navaids · Caching & Monitoring