Esempio Hello World

2 min di lettura

Esempio Hello World

Questo esempio crea un semplice endpoint API associato a un utente del database. Sono mostrati due approcci di autenticazione: il classico flusso JWT e il più semplice flusso a credenziali dirette.

1. Creazione Utente e Funzione

Nel tuo database (my_database):

-- 1. Crea un utente che effettuerà il login sull'API
CREATE ROLE demo_user WITH LOGIN PASSWORD 'user_password';
GRANT USAGE ON SCHEMA api TO demo_user;

-- 2. Crea la funzione Hello World
-- Input: jsonb vuoto, Output: json
CREATE OR REPLACE FUNCTION api.hello_world(payload jsonb)
RETURNS json
LANGUAGE sql
AS $$
    SELECT '"Hello World"'::json;
$$;

-- 3. Concedi i permessi all'utente
GRANT EXECUTE ON FUNCTION api.hello_world(jsonb) TO demo_user;
Quale approccio di autenticazione dovresti usare?
Scegli l’Opzione A (JWT) per sessioni basate su browser o utente finale. Scegli l’Opzione B (credenziali dirette) per lo sviluppo locale, gli script, o i servizi interni — non è richiesta alcuna gestione dei token.

Opzione A: Flusso con Token JWT

L’autenticazione JWT richiede che l’utente di sistema di PgArachne (pgarachne) possa passare a demo_user:

-- Richiesto solo per l'autenticazione JWT: permetti a PgArachne di passare a demo_user
GRANT demo_user TO pgarachne;

Passo 1 — Ottenimento di un JWT

Chiama il metodo JSON-RPC get_jwt con le credenziali dell’utente:

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}'

Risposta:

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

Passo 2 — Chiamata della Funzione

Usa il JWT nell’header Authorization:

export TOKEN="IL_TUO_TOKEN_JWT_QUI"

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}'

Risposta:

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

Opzione B: Credenziali dirette (nessun JWT richiesto)

Invia direttamente il nome utente e la password PostgreSQL con ogni richiesta usando l’autenticazione HTTP Basic. PgArachne apre un pool di connessioni come quell’utente — non è necessario alcun GRANT … TO pgarachne.

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}'

Risposta:

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

Il flag -u utente:password di curl imposta automaticamente l’header Authorization: Basic …. Entrambe le opzioni producono risposte identiche.

Consulta Sicurezza e Autenticazione — Credenziali dirette per un confronto completo di tutti i metodi di autenticazione.