Aufbau einer API-Abfrage
Die URL-Struktur jeder Abfrage an die Datenguide API setzt sich aus unterschiedlichen Bestandteilen zusammen, von denen die meisten optional sind:
https://tabular.genesapi.org?data=12612:BEV001&level=2&time=2008:
Obwohl die Reihenfolge der Parameter keine Rolle für die API spielt, halten wir im Folgenden trotzdem eine bestimmte Reihenfolge ein. Das macht die Abfragen übersichtlicher und besser lesbar.
- Die Basis-URL
https://tabular.genesapi.org
(notwendig) - Die Angabe des gesuchten Datensatzes mit
data=
(notwendig) - Die Abfrage des gewünschten Gebiets mit
level=
undregion=
(optional) - Die Abfrage des Zeitraums mit
time=
(optional) - Weitere Einstellungen wie Layout, Beschriftungen und Download-Format (optional)
Sämtliche an die REST-Schnittstelle gesendeten Abfragen folgen diesem Aufbau.
Diese API ist experimentell. Datenguide ist ein nicht-kommerzielles Open-Source-Projekt. Wir übernehmen keine Gewähr für die Zuverlässigkeit der Tools sowie die Richtigkeit und Vollständigkeit der abgerufenen Daten.
1. Die Basis-URL (notwendig)
Die Anfrage an die REST-Schnittstelle geschieht über die URL-Anfrage an die Adresse https://tabular.genesapi.org/. Ohne das Hinzufügen weiterer Parameter wird die Seite zwar aufgerufen, liefert aber keinen Datensatz zurück.
2. Die Angabe des gesuchten Datensatzes ?data=
(notwendig)
Die Angabe des Datensatzes data=
ist der wichtigste Parameter der Abfrage, denn nur durch die Angabe des
Datensatzes „weiß“ die REST-Schnittstelle, welche spezifischen Daten abgefragt werden sollen.
https://tabular.genesapi.org/?data=12612:BEV001
Wie in diesem Beispiel zu sehen, fügen wir den Namen eines Datensatzes (zum Beispiel 12612:BEV001
) gleich hinter dem data=
-Parameter an. Wie in vielen Programmiersprachen steht das Gleichheitszeichen nicht für eine Gleichsetzung, sondern für eine Zuweisung. Anders gesagt, um der Schnittstelle mitzuteilen, welcher Datensatz aufgerufen werden soll, weisen wir dem Parameter ?data
den Beispiel-Datensatz 12612:BEV001
über das Gleichheitzeichen zu: data=12612:BEV001
.
In der Datenbank steht 12612:BEV001
beispielsweise für das Merkmal „Lebend Geborene“ (BEV001
), das wiederum zur „Statistik der Geburten“ (12612
) gehört. Diese „Codes“ sind nicht sehr intuitiv, lassen sich jedoch einfach über eine Suchmaske nachschlagen.
3. Die Abfrage des gewünschten Gebiets region=
(optional)
Mit der reinen Angabe des Datensatzes ist die Anfrage bereits erfolgreich, alle weiteren Angaben sind
optional, erweitern oder verfeinern aber das Datensatz-Ergebnis. Der Parameter level=
legt fest, über welches
Gebiet wir Daten abfragen möchten. Ausgewählt werden können folgende Gebiete:
- 0 — Deutschland gesamt
- 1 — Bundesländer
- 2 — Regierungsbezirke / statistische Regionen
- 3 — Landkreise und kreisfreie Städte
- 4 — Gemeinden
Um regionale Statistiken über Grenzen hinweg vergleichbar zu machen, wird in Europa bei der Gebietseinteilung ein System namens NUTS („Nomenclature des unités territoriales statistiques“) verwendet. Mehr Informationen über einschlägige Begriffe wie regionale Tiefe, NUTS oder LAU findest du in unserem Artikel über regionale Einteilung.
Am bereits vorgestellten Beispiel der Geburtenzahlen können wir die Region einschränken, wenn wir
hinter den data=
ein Fragezeichen ?
als Trenner zwischen Daten und Region setzen und dann den Parameter
level=
mit der entsprechende Zahl anfügen, zum Beispiel 1
für Deutschland (gesamt):
https://tabular.genesapi.org/?data=12612:BEV001&level=0
Einzelne Regionen
Daten für eine bestimmte Region können mit dem Parameter region=
abgefragt werden. Der Parameter level=
kann dann weggelassen werden:
https://tabular.genesapi.org/?data=12612:BEV001®ion=01051
Die Nummer, die verwendet wird um die Regionen zu identifizieren, ist der Amtliche Gemeindeschlüssel (AGS). Weitere Infos und ein Tool, mit dem du den Schlüssel für jede mögliche Region herausfinden kannst, findest du in unserem Artikel über AGS.
Gruppen von Regionen
Möchtest du nicht nur Daten für eine einzelne Regionen auswählen, sondern für Gruppen von Regionen, beispielsweise für alle Gemeinden in einem Landkreis, kannst den Parameter parent=
verwenden. Dieses Beispiel zeigt alle Gemeinden (level=4
) im Landkreis Dithmarschen (parent=01051
):
https://tabular.genesapi.org/?data=12612:BEV001&level=4&parent=01051
4. Die Abfrage des Zeitraums mit time=
(optional)
Neben den Daten über bestimmte Gebiete interessiert uns natürlich auch der Zeitraum, wann die Daten erhoben
wurden. Mithilfe des Parameters time=
lassen sich Abfrage-Zeiträume bestimmen, eingrenzen und auswählen.
Wird keine Zeitangabe gemacht, geht die REST-Schnittstelle davon aus, dass wir den gesamten Abfragezeitraum
abrufen möchten.
time=YEAR:YEAR
ruft einen Zeitraum zwischen Start und Endjahr auf:
https://tabular.genesapi.org/?data=12612:BEV001®ion=01051&time=2000:2010time=:YEAR
ruft sämtliche Jahre bis inklusive des ausgewählten Jahres auf:
https://tabular.genesapi.org/?data=12612:BEV001®ion=01051&time=:2010time=YEAR:
ruft sämtliche Jahre ab dem ausgewählten Jahre auf:
https://tabular.genesapi.org/?data=12612:BEV001®ion=01051&time=2010:time=YEAR,YEAR
ruft mehrere Jahre auf:
https://tabular.genesapi.org/?data=12612:BEV001®ion=01051&time=2000,2005,2010,2015
5. Weitere Einstellungen (optional)
Weitere Einstellungen wie Layout, Beschriftungen und Download-Format können dazu verwendet werden, die Daten in das Format zu bringen, das du für die Weiterverarbeitung brauchst.
Layout:
layout=long
— Es wird eine Zeile pro Wert dargestellt (default)layout=time
— Es wird eine Zeile pro Jahr/Datum angezeigtlayout=region
— Es wird Eine Zeile pro Region dargestellt
Beschriftungen:
labels=id
— Statt der vollen Bezeichnung werden nur Kürzel („id“) angezeigt (default)labels=name
— Ausgeschriebene Bezeichnungen bei der Ausgabe anzeigen
Format:
format=csv
— Datensatz im CSV-Format ausgeben (default)format=tsv
— Daten im TSV-Format ausgeben (getrennt durch Tabs)delimiter=,
— Trennzeichen manuell festlegen (zum Beispiel;
)format=json
— Daten im JSON-Format ausgeben (ein Objekt pro Tabellenzeile plus Tabellen-Metadaten)
Datumsformat:
dformat=year
— Datum wird in Jahren dargestellt (default)dformat=date
— Datum wird in Tagen dargestellt
Viele Beispiele für mögliche Abfragen findet ihr auf Github. Wir haben außerdem Beispiele für die Verwendung mit Python und JavaScript zusammengestellt.