Save up to 17% with yearly billing

See pricing

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)

BedingungVerhalten
Suchbegriff kürzer als 2 Zeichen422 Unprocessable Entity
Gültiger Suchbegriff, keine Treffer200 mit airports: []
Gültiger Suchbegriff, Treffer gefunden200 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 []
BedingungVerhalten
Flughafen hat keine veröffentlichten Navaids200 mit navaids: []
Ungültiger Begrenzungsrahmen400

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