REST-Jdbc — JSONPlaceholder

JSONPlaceholder ist eine öffentliche Test-API ohne Authentifizierung — gut geeignet, um den RestJdbc-Treiber auszuprobieren (Lesen und Schreiben).

Schnellstart mit dem JDBC-Client

SQL-Dateien lassen sich direkt mit dem Treiber-JAR ausführen:

java -jar restjdbc.jar jsonplaceholder.sql

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

  1. Treiber-JAR bereitstellen (absoluter Pfad zur restjdbc.jar)
  2. Befehl im Ordner starten, in dem jsonplaceholder.sql und jsonplaceholder-spec.json liegen

Im JDBC-Client:

connect 'jdbc:rest:https://jsonplaceholder.typicode.com|spec=jsonplaceholder-spec.json'

Nach Ausführung der Datei beendet quit den Client.

1. JDBC-URL

jdbc:rest:https://jsonplaceholder.typicode.com

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

Bestandteil Wert
Treiber-Präfix jdbc:rest:
API-Basis-URL https://jsonplaceholder.typicode.com
Schema (SQL) public (Standard)

Beispiel-Verbindung (Java):

Properties props = new Properties();
props.setProperty("spec", "/pfad/zu/jsonplaceholder-spec.json");

Connection conn = DriverManager.getConnection(
    "jdbc:rest:https://jsonplaceholder.typicode.com", props);

2. Connection Properties

Property Wert für JSONPlaceholder Erforderlich
spec Pfad zur Spec (siehe unten) Ja
auth nicht nötig (none) Nein
user, password, token Nein
keyStore, … Nein

Minimal:

props.setProperty("spec", "/pfad/zu/jsonplaceholder-spec.json");

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

Spec-Datei: jsonplaceholder-spec.json

3. Spec-Datei

Datei: jsonplaceholder-spec.json

Auszug (posts mit Seiten-Paginierung):

{
  "entities": [
    {
      "name": "posts",
      "path": "/posts",
      "pagination": {
        "type": "page",
        "limitParam": "_limit",
        "pageParam": "_page",
        "defaultLimit": 10
      },
      "columns": [
        { "name": "id", "type": "BIGINT", "primaryKey": true },
        { "name": "userId", "type": "BIGINT" },
        { "name": "title", "type": "VARCHAR" },
        { "name": "body", "type": "VARCHAR" }
      ]
    }
  ]
}

Tabellen (Entities)

SQL-Tabelle REST-Pfad Paginierung
users /users none (ein Request)
posts /posts page mit _limit, _page
comments /comments page mit _limit, _page
albums /albums none
photos /photos page mit _limit, _page
todos /todos page mit _limit, _page

Bei page-Paginierung lädt der Treiber automatisch alle Seiten (z. B. alle 100 Posts), bis keine Daten mehr kommen.

Verschachtelte Felder bei users (address, company) sind in der Spec bewusst weggelassen — der Treiber liest standardmäßig nur flache Top-Level-Felder.

4. Authentifizierung

JSONPlaceholder verlangt keine Authentifizierung.

props.setProperty("auth", "none");

Oder einfach keine Auth-Properties setzen.

Es werden keine Authorization-Header gesendet; Client-Zertifikat (clientcert) ist nicht nötig.

5. SQL-Beispiele

Spalten mit gemischter Schreibweise (userId, postId) in SQL quoten ("userId").

SELECT

SELECT id, name, email FROM users;

SELECT id, title FROM posts FILTER userId=1;

SELECT id, name, email FROM comments FILTER postId=1;

SELECT id, title, completed FROM todos FILTER userId=1;
SQL HTTP
SELECT … FROM users GET https://jsonplaceholder.typicode.com/users
SELECT … FROM posts FILTER userId=1 GET …/posts?userId=1
SELECT … FROM comments FILTER postId=1 GET …/comments?postId=1
SELECT … FROM posts (alle Posts) GET …/posts?_limit=10&_page=1, dann _page=2, …

FILTER leitet Filter serverseitig an die API weiter (nicht wie WHERE lokal).

INSERT

INSERT INTO posts ("userId", title, body)
VALUES (1, 'Test', 'Body');

POST https://jsonplaceholder.typicode.com/posts mit JSON-Body {"userId":1,"title":"Test","body":"Body"}.

JSONPlaceholder simuliert Schreiboperationen — die API antwortet mit Erfolg, persistiert Daten aber nicht dauerhaft.

UPDATE

UPDATE posts SET title = 'Neuer Titel', body = 'Neuer Inhalt' FILTER id=1;

PUT https://jsonplaceholder.typicode.com/posts/1 mit JSON-Body aus den SET-Spalten.

DELETE

DELETE FROM posts FILTER id=1;

DELETE https://jsonplaceholder.typicode.com/posts/1.

6. System-Tabellen

Metadaten aus der Spec abfragen:

SELECT table_name, remarks FROM system.table_list;

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

SELECT column_name FROM system.pk_list WHERE table_name = 'posts';

7. Hinweise

  • Schreiben: INSERT/UPDATE/DELETE funktionieren technisch; die Test-API speichert nicht wirklich.
  • Paginierung: Bei posts, comments, photos und todos ist in der Spec "type": "page" mit _limit und _page konfiguriert; der Treiber lädt alle Seiten automatisch.