Glossar
Ein Nachschlagewerk für die Fachbegriffe und projektspezifischen Begriffe, die in
reisewarnungen-cli verwendet werden. Die Fachsprache (Reisehinweise des Auswärtigen
Amts) ist deutsch; dieses Glossar nennt die deutschen Begriffe zusammen mit den
englischen Bezeichnungen, die CLI und Client verwenden, wo es solche gibt.
Übersetzungstabelle. CLI und Client halten sich an diese Zuordnung:
Deutsch Englisch / Client-Begriff Reisewarnung (full) travel warning Teilreisewarnung partial / regional warning Reise- und Sicherheitshinweise travel and safety advice Auswärtiges Amt Federal Foreign Office Land country Inhalt content
Die API und ihr Herausgeber
Auswärtiges Amt (AA). Das deutsche Außenministerium. Es gibt die amtlichen
Reise- und Sicherheitshinweise heraus, die dieses Tool liest. Website und Datenhost:
auswaertiges-amt.de.
Open-Data-API zu Reisewarnungen. Der offene Endpoint ohne Authentifizierung, den
das AA unter https://www.auswaertiges-amt.de/opendata/travelwarning veröffentlicht.
Er liefert die Reise- und Sicherheitshinweise des AA je Land als JSON. Nur lesend
(GET); ein API-Schlüssel ist nicht nötig. Dies ist die einzige API, die das Tool
kapselt; DEFAULT_BASE_URL ist https://www.auswaertiges-amt.de, der Ressourcenpfad
ist /opendata/travelwarning.
Reise- und Sicherheitshinweise. Die länderbezogenen Hinweise des AA für Reisende:
Einreisebestimmungen, Sicherheitslage, Gesundheit und – wo die Lage es erfordert – eine
ausdrückliche Warnung. Der Hinweistext wird als HTML im Feld content geliefert.
Endpoints / Ressourcen
Listen-Endpoint (GET /opendata/travelwarning). Liefert alle Länder auf einmal
als Zuordnung von Content-ID -> Länderzusammenfassung, dazu Envelope-Felder. Die
Zusammenfassungen je Land enthalten hier nicht den HTML-content. CLI: list
(roh) und countries (abgeflacht).
Einzel-Endpoint (GET /opendata/travelwarning/{contentId}). Liefert die
vollständigen Hinweise eines Landes, mit befülltem HTML-content. CLI: get.
Antwortstruktur
response-Envelope. Jede API-Antwort ist in ein oberstes response-Objekt
eingebettet. Der Client packt es aus: list() liefert response. Eine 200-Antwort,
deren Body kein solcher Envelope ist (null, {}, das JSON einer anderen API, ein
response, das kein Objekt ist), wird bei list, countries und get als
ReiseParseError (Exit 1) gemeldet, statt als leerer Erfolg verschleiert oder als
„nicht gefunden“ gemeldet zu werden.
lastModified. Ein Envelope-Feld (ein Unix-Epoch-Zeitstempel in Sekunden),
das neben den Ländereinträgen mitgeliefert wird – dem Namen nach der Zeitpunkt der letzten
Änderung des Datenbestands, doch es hinkt den lastModified-Werten der Einträge weit
hinterher (1757063288, also 05.09.2025, bei einer Prüfung am 15.09.2026). Es ist
kein Land, deshalb überspringt summaries() es beim Abflachen.
contentList. Ein Envelope-Feld: ein Array aller Content-IDs, das die Quelle neben
den Zusammenfassungen je Land mitliefert. Ebenfalls kein Land, deshalb überspringt
summaries() es.
TravelWarning. Der Eintrag eines Landes. Felder, die der Client liefert: title,
countryCode, iso3CountryCode, countryName, die vier booleschen Warn-Flags
(siehe unten), lastModified, effective, lastChanges, content (HTML, nur beim
Einzel-Endpoint) und disclaimer.
CountryEntry. Ein TravelWarning, ergänzt um seine id (die Content-ID), erzeugt
von summaries() – die abgeflachte Array-Ansicht der Liste.
Kennungen & Codes
Content-ID (contentId). Der numerische String-Schlüssel, unter dem der Eintrag
eines Landes in der response-Zuordnung liegt (z. B. 226768). Er ist das Feld id
eines CountryEntry und das Pflichtargument von get <contentId>. Er ist kein
ISO-Ländercode. Alles außer ASCII-Ziffern (leer, 226768x, ..) wird vor jeder Anfrage
abgelehnt – von der CLI wie vom get() der Bibliothek –, statt an die Quelle gesendet zu
werden, die eine führende Zahl großzügig liest oder .. zu einem anderen Pfad auflöst.
countryCode. Der zweibuchstabige Ländercode nach ISO 3166-1 alpha-2, z. B. TH,
JO. Kosovo, das keinen offiziellen ISO-Code hat, trägt XK.
iso3CountryCode. Der dreibuchstabige Ländercode nach ISO 3166-1 alpha-3, z. B.
DEU, FRA.
countryName. Der lesbare Name des Landes (deutsch).
Warn-Flags
Die vier booleschen Felder, die der Client liefert, nach zunehmender Spezifität. Ein
Land gilt als „mit Warnung“ (Filter countries --warned-only), wenn eines davon
true ist. Die Regel gehört der Bibliothek: Sie exportiert sie als
isWarned(entry) und wendet sie in summaries({ warnedOnly: true }) an, das die
CLI aufruft. Jeder Ländereintrag muss warning und partialWarning als boolesche Werte
tragen (die beiden Lage-Flags dürfen fehlen, sind aber boolesch, wenn vorhanden): Eine
Antwort mit fehlendem, umbenanntem oder nicht booleschem Flag ("true", 1, null)
endet mit Exit 1, statt ein Land mit Warnung stillschweigend wegzulassen oder
hinzuzufügen.
warning. Für das ganze Land gilt eine vollständige Reisewarnung – der stärkste Rat des AA, von Reisen abzusehen.
partialWarning. Es gilt eine Teilreisewarnung – die Warnung betrifft bestimmte Regionen statt des ganzen Landes.
situationWarning. Es gilt eine lagebezogene Warnung (verknüpft mit einem bestimmten Ereignis oder Umstand).
situationPartWarning. Eine lagebezogene Teilwarnung – lagebedingt und auf einen Teil des Landes beschränkt.
Abraten ohne Flag. Unterhalb der formalen Stufen rät der Text des Hinweises von
Reisen ab – ins ganze Land oder in Regionen –, ohne dass ein Flag gesetzt ist: „Von
Reisen … wird (dringend) abgeraten”, „Das Auswärtige Amt rät … ab”, „Vermeiden Sie …
Reisen”, „Meiden Sie möglichst Reisen …”, „… sollte … gemieden werden”. Türkei, Angola,
Bangladesch, Jordanien und Mexiko hatten am 06.10.2026 alle vier Flags false und
solche Sätze im Text. „Kein Flag” heißt also „keine formale Warnung”, nicht
„unbedenklich”. Der Befehl advice (Bibliothek: client.advice, adviceSentences)
listet jeden Satz mit einer dieser Formulierungen samt Abschnitt; travel: true
markiert die, die außerdem Reisen, einen Aufenthalt oder einen Landesteil nennen.
Weitere Felder eines Eintrags
title. Der Titel des Hinweisdokuments.
effective. Ein Unix-Epoch-Zeitstempel (Sekunden): seit wann die aktuellen
Hinweise gelten. Das eigene lastModified jedes Eintrags verwendet dieselbe Einheit.
lastChanges. Eine kurze, lesbare Notiz dazu, was sich in der letzten Überarbeitung der Hinweise geändert hat.
content. Der vollständige Hinweistext als HTML. Nur beim Einzel-Endpoint
vorhanden, erscheint also in Ergebnissen von get, nicht bei list /
countries.
disclaimer. Der Standard-Haftungsausschluss des AA, der die Hinweise begleitet.
API- & Transportkonzepte
Nur lesend, ohne Authentifizierung. Der Endpoint liefert Daten über GET ohne
Schlüssel, Token oder Login. Der Client liest nur; er schreibt nichts.
Retry / Backoff. Vorübergehende Antworten 429 (Rate-Limit) und 503 werden
automatisch wiederholt (--max-retries / maxRetries, 0–10 (MAX_RETRIES),
Standard 2), ebenso abgebrochene Verbindungen. Die Wartezeit wächst bei 503 linear
(200 ms, 400 ms, …) und beginnt bei 429 mit 1 s, verdoppelt je Versuch (höchstens 30 s).
Ein Retry-After des Servers (Sekunden oder ein HTTP-Datum) kann sie verlängern, nie
verkürzen: Retry-After: 0 wartet trotzdem. Ein Retry-After über 30 s wird nicht
abgewartet: Der Fehler wird sofort gemeldet und nennt die verlangte Wartezeit.
Weiterleitungen. Die Engine folgt bis zu maxRedirects (Standard 5)
HTTP-Weiterleitungen (301/302/303/307/308) und löst Location relativ zur aktuellen
URL auf. Die Zugangsdaten einer --base-url (user:password@) gehen nur an den Origin
der Basis-URL (Schema, Host und Port), bei jedem Schritt: Eine Weiterleitung auf denselben
Origin behält sie, eine auf einen anderen Host, Port oder ein anderes Schema (auch http:
→ https:) lässt sie weg, und Zugangsdaten, die ein Server in seinen Location-Header
schreibt, werden nie gesendet. Ein 401/403 nach einer solchen Weiterleitung sagt das
(bei http: → https:: eine https-Basis-URL verwenden). Bei einer Weiterleitung auf
einen anderen Origin entfernt sie außerdem sensible Header
(Authorization, Cookie, X-API-Key, Proxy-Authorization,
WWW-Authenticate), damit Zugangsdaten nie an einen anderen Host gelangen. Andere
3xx-Antworten (300, 304, …), ein fehlender oder ungültiger Location-Header und eine
Weiterleitung über das Limit hinaus werden nicht verfolgt: Die Fehlermeldung nennt das Ziel,
z. B. HTTP 302 for GET …: redirect to https://… not followed (stopped after 5 redirects)
oder redirect not followed (no Location header) (Exit 1).
maxResponseBytes. Eine feste Obergrenze für die Größe des Antwortkörpers (Standard
100 MiB; 0 schaltet sie ab), bei deren Überschreiten die Anfrage abgebrochen wird – zum
Schutz vor Speichererschöpfung durch einen feindseligen oder fehlerhaften Endpoint.
Basis-URL. --base-url / baseUrl muss eine absolute http:/https:-URL ohne
Query und Fragment, ohne umgebende Leerzeichen und ohne Steuerzeichen sein (ein
Pfadpräfix ist erlaubt); ein % in Benutzername oder Passwort muss ein Escape sein
(%25 für ein wörtliches %). Die Bibliothek prüft sie beim
Erzeugen des Clients (validateBaseUrl) und wirft einen ReiseValidationError, also
einen Konfigurationsfehler und keinen Netzwerkfehler; die CLI meldet dieselbe Nachricht
als Bedienfehler (Exit 1).
Engine-Grenzen prüft die Bibliothek. timeoutMs (0–MAX_TIMEOUT_MS),
maxRetries (0–MAX_RETRIES), retryDelayMs (0–30000) sowie maxRedirects
und maxResponseBytes (nicht negativ) müssen ganze Zahlen sein. Der Client-Konstruktor lehnt
jeden anderen Wert – negativ, gebrochen, NaN, Infinity, über der Obergrenze – vor
jeder Anfrage mit einem ReiseValidationError ab, sodass ein falscher Wert nie eine
Grenze abschaltet. Die Flags der CLI wenden dieselbe Regel an.
Eine leere Liste ist ein Fehler. Die Liste umfasst rund 200 Länder. Eine Antwort
ohne jedes Land, ein mit HTTP 200 gesendeter Fehler-Envelope oder eine contentList, die
IDs ohne Eintrag nennt, endet mit Exit 1 – sie wird nie als „keine Reisewarnungen”
gelesen. countries --warned-only mit [] heißt also: Die API hat ihre Liste geliefert,
und kein Land darin trägt ein Flag.
Eintragssuche bei get. Der Einzel-Endpoint legt seinen einen Eintrag unter der
angefragten Content-ID ab, und get liefert nur diesen Eintrag. Ein Envelope ganz ohne
Ländereintrag gilt als nicht gefunden (ReiseNotFoundError, Exit 4); einer, dessen
Ländereinträge unter anderen Schlüsseln stehen, ist eine fehlerhafte Antwort
(ReiseParseError, Exit 1) und wird nie als das angefragte Land gelesen – ein Werkzeug
für Reisesicherheit darf nicht mit einem anderen Land antworten. (Frühere Versionen
akzeptierten einen einzigen Eintrag unter beliebigem Schlüssel.)
Log-Eintrag. Jede Diagnosezeile, die die CLI auf stderr schreibt: ein Zeitstempel,
eine Stufe (ERROR, WARN, INFO) und ein Thema reisewarnungen.<Bereich>, als Text
(im Stil von log4j) oder mit --log-format jsonl als ein JSON-Objekt pro Zeile. Die
Bereiche: cli (Bedienfehler, Meldungen von commander, unerwartete Fehler), api (die
Antworten der API: ein Fehlerstatus, ein nicht gefundenes Land, eine fehlerhafte Antwort –
kein JSON, die falsche Form, ein mit HTTP 200 gesendeter Fehler-Envelope, ein unbekannter
Zeichensatz), http (die Verbindung, die Warnung vor unverschlüsseltem http: und je Wiederholung eine WARN-Zeile vor dem Warten) und
output (die -o-Datei, ein fehlgeschlagenes Schreiben auf stdout). Ein Eintrag ist
immer eine Zeile; Steuerzeichen darin werden maskiert.
Bibliothek & Interna. Begriffe zum TypeScript-Client und seinen Interna –
ReisewarnungenClient, die Request-Engine, Transport, Retry/Backoff, Fehlertypen, die Eintragssuche beiget– finden Sie jetzt in DEVELOPING.md (englisch).