Ejemplo Hello World

2 min de lectura

Ejemplo Hello World

Este ejemplo crea un endpoint simple de API asociado a un usuario de base de datos. Se muestran dos enfoques de autenticación: el flujo clásico con JWT y el flujo más sencillo de credenciales directas.

1. Crear usuario y función

En la base de datos (my_database):

-- 1. Crear un usuario que iniciará sesión en la API
CREATE ROLE demo_user WITH LOGIN PASSWORD 'user_password';
GRANT USAGE ON SCHEMA api TO demo_user;

-- 2. Crear la función Hello World
-- Entrada: jsonb vacío, Salida: json
CREATE OR REPLACE FUNCTION api.hello_world(payload jsonb)
RETURNS json
LANGUAGE sql
AS $$
    SELECT '"Hello World"'::json;
$$;

-- 3. Otorgar permiso al usuario
GRANT EXECUTE ON FUNCTION api.hello_world(jsonb) TO demo_user;

¿Qué opción de autenticación utilizar?

  • Opción A — Token JWT: recomendada cuando se desea gestionar sesiones con tokens de corta duración. Requiere el paso adicional de GRANT demo_user TO pgarachne.
  • Opción B — Credenciales directas: más sencilla para desarrollo local y scripts. No requiere GRANT adicional ni gestión de tokens.

Opción A: Flujo de token JWT

A.1 Configurar privilegios del proxy

Para este método es necesario permitir que PgArachne cambie de rol al usuario:

-- Permitir que PgArachne (usuario del sistema) pueda cambiar al demo_user
GRANT demo_user TO pgarachne;

A.2 Obtener un token JWT

Utilice el método JSON-RPC get_jwt para obtener un token:

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

Respuesta:

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

A.3 Llamar a la función

Utilice el token para llamar a la función hello_world:

export TOKEN="TU_TOKEN_JWT_AQUÍ"

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

Respuesta:

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

Opción B: Credenciales directas (Basic Auth)

Con este método no se requiere ningún GRANT adicional ni gestión de tokens. Las credenciales de PostgreSQL se envían directamente en cada petición mediante HTTP Basic Authentication.

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

Respuesta:

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

El indicador -u usuario:contraseña de curl configura automáticamente el encabezado Authorization: Basic …. Ambas opciones producen respuestas idénticas.

Consulte Seguridad y Autenticación — Credenciales directas para una comparación completa de todos los métodos de autenticación.