REST-Jdbc — OpenWeatherMap

OpenWeatherMap liefert Wetterdaten. Dieses Beispiel nutzt die 5-Tage-Vorhersage (3-Stunden-Schritte) und zeigt parametrisierte Abfragen mit FILTER — der Ortsname wird als Query-Parameter q übergeben, der API-Schlüssel über Connection Properties (auth=apikey).

Schnellstart mit dem JDBC-Client

java -jar /pfad/zu/restjdbc.jar openweather.sql

Die Datei openweather.sql enthält Verbindung und Beispiel-Abfragen. Vorgehen:

  1. Treiber-JAR bereitstellen (absoluter Pfad zur restjdbc.jar)
  2. API-Schlüssel auf openweathermap.org/api anlegen (kostenlose Registrierung)
  3. In openweather.sql apiKey=XXXX durch Ihren Schlüssel ersetzen
  4. Befehl im Ordner starten, in dem openweather.sql und die Spec liegen
connect 'jdbc:rest:https://api.openweathermap.org|spec=openweather-spec.json,auth=apikey,apiKey=Ihr_Schlüssel,apiKeyLocation=query,apiKeyParam=appid'

1. JDBC-URL

jdbc:rest:https://api.openweathermap.org

Die Basis-URL der API steht in der JDBC-URL.

Bestandteil Wert
Treiber-Präfix jdbc:rest:
API-Basis-URL https://api.openweathermap.org
Schema (SQL) public (Standard)

Beispiel-Verbindung (Java):

Properties props = new Properties();
props.setProperty("spec", "/pfad/zu/openweather-spec.json");
props.setProperty("auth", "apikey");
props.setProperty("apiKey", System.getenv("OPENWEATHER_API_KEY"));
props.setProperty("apiKeyLocation", "query");
props.setProperty("apiKeyParam", "appid");

Connection conn = DriverManager.getConnection(
    "jdbc:rest:https://api.openweathermap.org", props);

2. Connection Properties

Property Wert Erforderlich
spec Pfad zur Spec Ja
auth apikey Ja
apiKey OpenWeather API-Schlüssel Ja
apiKeyLocation query (Standard, bei OpenWeather explizit) Nein
apiKeyParam Name des Query-Parameters (appid bei OpenWeather) Ja

Spec-Pfad: absoluter Pfad zu Ihrer lokalen Kopie der Spec-Datei.

Spec-Datei: openweather-spec.json

3. Spec-Datei

Datei: openweather-spec.json

Auszug:

{
  "entities": [
    {
      "name": "forecast",
      "path": "/data/2.5/forecast?units=metric",
      "dataPath": "/list",
      "pagination": { "type": "none" },
      "write": false,
      "columns": [
        { "name": "dt", "type": "BIGINT", "primaryKey": true },
        { "name": "temp", "type": "DOUBLE", "jsonPath": "/main/temp" },
        { "name": "humidity", "type": "BIGINT", "jsonPath": "/main/humidity" },
        { "name": "description", "type": "VARCHAR", "jsonPath": "/weather/0/description" }
      ]
    }
  ]
}

Tabelle forecast

SQL-Tabelle REST-Pfad Paginierung
forecast /data/2.5/forecast?units=metric none (eine Antwort mit bis zu 40 Einträgen)
  • units=metric: Temperaturen in °C (fest in der Spec).
  • dataPath /list: Die Vorhersage-Einträge stehen im Array list der JSON-Antwort.
  • jsonPath: Temperatur und Wetterbeschreibung liegen verschachtelt unter main bzw. weather.

4. Authentifizierung

OpenWeather erwartet den API-Schlüssel als Query-Parameter appid, nicht als Bearer-Header. Dafür gibt es das Auth-Verfahren apikey:

props.setProperty("auth", "apikey");
props.setProperty("apiKey", "Ihr_OpenWeather_Schlüssel");
props.setProperty("apiKeyLocation", "query");
props.setProperty("apiKeyParam", "appid");

Der Treiber hängt bei jedem Request appid=… an die URL an. Der Ortsname kommt zusätzlich per FILTER q=… dazu.

5. SQL-Beispiele

SELECT

SELECT dt, temp, humidity, description FROM forecast FILTER q=Berlin;

SELECT dt, temp, humidity FROM forecast FILTER q=London;

SELECT dt, temp, description FROM forecast FILTER q=New York;
SQL HTTP
SELECT … FILTER q=Berlin GET …/forecast?appid=…&units=metric&q=Berlin
SELECT … FILTER q=London GET …/forecast?appid=…&units=metric&q=London

FILTER q=… setzt den Ortsnamen als Query-Parameter — typisches Muster für parametrisierte REST-Abfragen.

Spalten mit Leerzeichen in Werten ggf. quoten: FILTER q='New York'.

INSERT, UPDATE, DELETE

Nicht unterstützt ("write": false).

6. System-Tabellen

SELECT table_name FROM system.table_list;

SELECT column_name, type_name FROM system.column_list WHERE table_name = 'forecast';

7. Hinweise

  • Aktivierung: Neuer API-Schlüssel kann einige Minuten brauchen, bis er aktiv ist.
  • Free-Tier: Begrenzte Aufrufe pro Minute/Tag — siehe OpenWeather-Dokumentation.
  • Aktuelles Wetter: Der Endpunkt /data/2.5/weather liefert ein einzelnes JSON-Objekt (kein Array) — der Treiber erwartet Arrays. Für Vorhersagen eignet sich /data/2.5/forecast mit dataPath: "/list".
  • Mehrere Parameter: Mehrere Query-Parameter mit FILTER param1=… AND param2=… — siehe Webmetic-Beispiel. Feste Parameter wie units stehen in der Spec im path; der API-Schlüssel über auth=apikey.