Synapse API es un framework de orquestación de APIs dinámicas construido sobre Fastify y TypeScript. Su objetivo principal es permitir la generación automática de endpoints mediante archivos de configuración YAML, abstrayendo la lógica de conexión a bases de datos y la implementación de rutas mediante patrones de diseño como Strategy y Factory.
- Arquitectura Basada en Estrategias: Implementación limpia de verbos HTTP (GET, POST) mediante el patrón Strategy.
- Configuración Declarativa: Define tus modelos de datos, bases de datos y endpoints en archivos YAML (
endpoints/*.yml). - Soporte Multi-Database: Conector extensible (actualmente con soporte para PostgreSQL) gestionado por una
ConnectorFactory. - Inyección de Variables de Entorno: Resolución dinámica de variables
${VAR}dentro de los archivos de configuración. - Alto Rendimiento: Construido sobre Fastify para garantizar la mínima latencia.
##️ Tecnologías
- Runtime: Node.js (ESM).
- Framework: Fastify.
- Lenguaje: TypeScript.
- Gestor de Paquetes: pnpm.
- Base de Datos: PostgreSQL (vía
pg).
- Node.js >= 24.14.0
- pnpm instalado (
npm install -g pnpm)
git clone https://github.com/reivajdev/synapse-api.git
cd synapse-api
pnpm install
Crea un archivo .env en la raíz del proyecto basándote en el ejemplo:
# Directorios de la App
APP_ROOT=./
APP_ENDPOINTS=./endpoints
APP_LOGS=./logs
# Configuración del servidor
PORT=4000
HOST=localhost
BIND_ADDRESS=0.0.0.0
NODE_ENV=development
DB_PG_SERVER=tu_servidor
DB_PG_DATABASE=tu_base_de_datos
DB_PG_PORT=puerto
DB_PG_USER=usuario_bbdd
DB_PG_PASS=password_bbdd
##️ Estructura del Proyecto
src/
├── config/ # Configuración global y carga de .env
├── interfaces/ # Definiciones de tipos y contratos
├── lib/
│ ├── core/ # Motor principal de la API
│ │ └── strategies/ # Lógica por cada método HTTP (GET, POST)
│ └── database/ # Capa de persistencia y conectores
├── loader.ts # Cargador de configuraciones YAML
└── index.ts # Punto de entrada de la aplicación
endpoints/ # Definiciones YAML de la API
Añade un archivo .yml en la carpeta /endpoints. Ejemplo de estructura:
apiVersion: v1
prefix: 'synapse-api/{apiVersion:}'
#Pendiente de definir
permissions:
# Definimos las bases de datos que queramos usar
# Tipo de base de datos, y parametros de conexión
# las variables la tenemos que poner en el .env
databases:
users_db:
type: "postgres"
server: "${DB_PG_SERVER}"
database: "${DB_PG_DATABASE}"
port: "${DB_PG_PORT}"
user: "${DB_PG_USER}"
pass: "${DB_PG_PASS}"
#Definimos los endpoints, donde se va a publicar, descripción, base de datos que vamos a usar, el esquema y los metodos
endpoints:
- endpoint: "users"
description: "Gestión de usuarios del sistema"
use_db: "users_db"
main_table: "tester.users"
query_table: "tester.users"
# IMPLEMENTAR Definimos el esquema que queremos se puede poner all para todos los campos
schema:
id: "int"
username: "string"
email: "email"
active: "bool"
created_at: "datetime"
# Definimos las metodos http con los permisos.
methods:
get:
filters: ["id", "username", "active"] # Aquí el "all" es opcional
post:
required: ["username", "email"] # Campos obligatorios para crearpnpm dev: Inicia el servidor en modo desarrollo contsx watch.pnpm build: Compila el proyecto a JavaScript en la carpetadist.pnpm start: Ejecuta la versión compilada.
El core del sistema utiliza un RouterBuilder que:
- Lee las configuraciones YAML a través del
loader. - Identifica el tipo de operación y selecciona la
RouteStrategyadecuada (GET, POST, etc.). - Instancia los conectores de base de datos necesarios mediante la
ConnectorFactory.
Este proyecto está bajo la Licencia MIT. Consulte el archivo LICENSE para más detalles.
*Desarrollado por reivajdev