JSON-RPC & Hello World

2 Min. Lesezeit

JSON-RPC & Hello World

Dieses Beispiel erstellt einen einfachen API-Endpunkt, der einem Datenbankbenutzer zugeordnet ist. Zwei Authentifizierungsansätze werden gezeigt: der klassische JWT-Ablauf und der einfachere Ablauf mit direkten Zugangsdaten.

1. Benutzer und Funktion erstellen

In Ihrer Datenbank (my_database):

-- 1. Benutzer erstellen, der sich bei der API anmelden kann
CREATE ROLE demo_user WITH LOGIN PASSWORD 'user_password';
GRANT USAGE ON SCHEMA api TO demo_user;

-- 2. Hello-World-Funktion erstellen
-- Eingabe: leeres jsonb, Ausgabe: json
CREATE OR REPLACE FUNCTION api.hello_world(payload jsonb)
RETURNS json
LANGUAGE sql
AS $$
    SELECT '"Hello World"'::json;
$$;

-- 3. Berechtigung für den Benutzer vergeben
GRANT EXECUTE ON FUNCTION api.hello_world(jsonb) TO demo_user;
Welchen Authentifizierungsansatz sollten Sie verwenden?
Wählen Sie Option A (JWT) für browserbasierte Sitzungen oder Endnutzer-Sitzungen. Wählen Sie Option B (direkte Zugangsdaten) für lokale Entwicklung, Skripte oder interne Dienste — kein Token-Management erforderlich.

Option A: JWT-Token-Ablauf

Die JWT-Authentifizierung erfordert, dass der PgArachne-Systembenutzer (pgarachne) zu demo_user wechseln kann:

-- Required for JWT auth only: allow PgArachne to switch to demo_user
GRANT demo_user TO pgarachne;

Schritt 1 — JWT abrufen

Rufen Sie die JSON-RPC-Methode get_jwt mit den Zugangsdaten des Benutzers auf:

curl -X POST http://localhost:8080/db/my_database/jsonrpc \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","method":"get_jwt","params":{"login":"demo_user","password":"user_password"},"id":1}'

Antwort:

{"jsonrpc":"2.0","result":{"token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."},"id":1}

Schritt 2 — Funktion aufrufen

Verwenden Sie das JWT im Authorization-Header:

export TOKEN="YOUR_JWT_TOKEN_HERE"

curl -X POST http://localhost:8080/db/my_database/jsonrpc \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","method":"api.hello_world","params":{},"id":1}'

Antwort:

{"jsonrpc":"2.0","result":"Hello World","id":1}

Option B: Direkte Zugangsdaten (kein JWT erforderlich)

Senden Sie den PostgreSQL-Benutzernamen und das Passwort direkt mit jedem Request über HTTP-Basic-Authentifizierung. PgArachne öffnet einen Connection-Pool als dieser Benutzer — kein GRANT … TO pgarachne erforderlich.

curl -X POST http://localhost:8080/db/my_database/jsonrpc \
  -u demo_user:user_password \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","method":"api.hello_world","params":{},"id":1}'

Antwort:

{"jsonrpc":"2.0","result":"Hello World","id":1}

Das Flag -u user:password von curl setzt automatisch den Authorization: Basic …-Header. Beide Optionen liefern identische Antworten.

Siehe Sicherheit & Authentifizierung — Direkte Zugangsdaten für einen vollständigen Vergleich aller Authentifizierungsmethoden.