JSON-RPC a Hello World

2 min čtení

JSON-RPC a Hello World

Vytvoříme jednoduchý API endpoint přiřazený k databázovému uživateli. Jsou ukázány dva přístupy k autentizaci: klasický tok s JWT a jednodušší tok s přímým přihlášením.

1. Vytvoření uživatele a funkce

V databázi (my_database):

-- 1. Vytvoříme uživatele, který se bude přihlašovat k API
CREATE ROLE demo_user WITH LOGIN PASSWORD 'user_password';
GRANT USAGE ON SCHEMA api TO demo_user;

-- 2. Vytvoříme funkci Hello World
-- Input: prázdný jsonb, Output: json
CREATE OR REPLACE FUNCTION api.hello_world(payload jsonb)
RETURNS json
LANGUAGE sql
AS $$
    SELECT '"Hello World"'::json;
$$;

-- 3. Udělíme uživateli oprávnění spustit funkci
GRANT EXECUTE ON FUNCTION api.hello_world(jsonb) TO demo_user;
Kterou metodu autentizace zvolit?
Zvolte Variantu A (JWT) pro relace v prohlížeči nebo pro přihlášení koncových uživatelů. Zvolte Variantu B (přímé přihlášení) pro lokální vývoj, skripty nebo interní služby — správa tokenů není nutná.

Varianta A: Tok s JWT tokenem

Autentizace pomocí JWT vyžaduje, aby systémový uživatel PgArachne (pgarachne) mohl přepnout na demo_user:

-- Vyžadováno pouze pro JWT autentizaci: povolí PgArachne přepnout se na demo_user
GRANT demo_user TO pgarachne;

Krok 1 — Získání JWT

Zavolejte metodu JSON-RPC get_jwt s přihlašovacími údaji uživatele:

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

Odpověď:

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

Krok 2 — Volání funkce

Použijte JWT v hlavičce Authorization:

export TOKEN="VÁŠ_JWT_TOKEN_ZDE"

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

Odpověď:

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

Varianta B: Přímé přihlášení (bez JWT)

Zasílejte PostgreSQL uživatelské jméno a heslo přímo s každým požadavkem pomocí HTTP Basic Authentication. PgArachne otevře connection pool jako daný uživatel — příkaz GRANT … TO pgarachne není potřeba.

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

Odpověď:

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

Přepínač -u uzivatel:heslo v curl automaticky nastaví hlavičku Authorization: Basic …. Obě varianty vrátí shodnou odpověď.

Podrobné srovnání všech metod autentizace naleznete v části Bezpečnost a autentizace — Přímé přihlášení.