JSON-RPC a Hello World
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;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í.