Introducción
1. Introducción y arquitectura
1.1 ¿Qué es EWeb?
EWeb es un framework web embebido para Free Pascal: el motor completo (enrutador, servidor HTTP, sesiones, plantillas, formularios, acceso a datos y contraseñas) se distribuye como una librería estática ya compilada (libeweb.a) que se enlaza directamente dentro del ejecutable de la aplicación. No hay proceso externo, ni runtime adicional, ni dependencias de terceros más allá de lo que trae Free Pascal (FCL-DB, SQLDB) y, si se usa EDB, la librería nativa de SQLite.
El resultado es un único binario autocontenido que sirve HTTP directamente.
Este manual documenta exclusivamente el uso delibeweb.aa través de su wrapper público,eweb/webapi.pas. No aborda la implementación interna del motor ni su compilación desde el código fuente.
1.2 Filosofía de diseño
- Wrapper delgado, motor opaco. El desarrollador nunca interactúa con la implementación interna (drivers de base de datos, parsing de plantillas, HMAC de sesiones, etc.). Todo eso vive dentro de
libeweb.a. La aplicación sólo ve la unidad públicaWebAPI.pas: clases comoTEContext,TERouter,TEWebServer,TEDB,TEForm,TEPassword, y funciones globales (NewContext,CSRFToken). - Seguro por defecto. Sesiones firmadas con HMAC-SHA1, cookies
HttpOnly, comparaciones en tiempo constante para CSRF y contraseñas,SaveFileSafeque evita colisiones y path traversal, consultas SQL parametrizadas (?) en vez de concatenación de strings. - Declarativo. El registro de middlewares y rutas se hace con llamadas explícitas y legibles:
Router.Use(@SessionManager),Router.Get('/blog/{id}', @BlogDetail). - JSON como lengua franca de datos. El acceso a base de datos (
EDB) nunca expone datasets ni tipos de driver: todo lo que entra es SQL + parámetros, y todo lo que sale esTJSONData.
1.3 Componentes del framework
Toda la funcionalidad se consume a través de las clases y funciones expuestas por la unidad WebAPI (el wrapper público de libeweb.a):
| Componente | Wrapper público | Descripción |
|---|---|---|
| Servidor HTTP | TEWebServer | Escucha en un puerto y despacha peticiones al router. |
| Enrutador | TERouter | Registra rutas GET/POST, parámetros {nombre}, middlewares y sirve archivos estáticos. |
| Contexto de petición | TEContext | Acceso a parámetros, respuesta (texto/HTML/JSON), variables de plantilla, archivos subidos y motor de plantillas (Render). |
| Sesiones | TEWebSession (Ctx.Session) | Sesión tipada por cookie firmada, siempre disponible. |
| Formularios y CSRF | TEForm, CSRF, Forms, CSRFToken | Validación de campos y protección CSRF estilo NoSurf. |
| Acceso a datos | TEDB, EDB | Motor SQL → JSON, con SQLite disponible en esta edición. |
| Contraseñas | TEPassword, EPassword | BCrypt puro en Free Pascal, formato $2b$. |
| Middlewares | ELogger y otros | Utilidades transversales (logging, etc.). |
1.4 Flujo de una petición
TEWebServer.Listen(puerto)inicia el servidor HTTP embebido.- Por cada request entrante, el motor construye un contexto interno y lo hace pasar por la cadena de middlewares registrados con
Router.Use(...), en el orden en que fueron registrados. - Si la ruta empieza con
/static/, el archivo se sirve directamente desde el directoriostatic/del directorio de trabajo — no requiere handler ni ruta explícita. - En caso contrario, el router busca la primera ruta registrada que coincida con el método HTTP y el path (incluyendo parámetros
{nombre}). - Se invoca el
TWebHandler(procedure(ctx: Pointer)) asociado. Dentro del handler, la aplicación construye unTEContextconNewContext(HCtx)y trabaja con él (leer parámetros, consultar la base de datos, setear variables, renderizar una plantilla o responder JSON/texto/HTML). - Si nada coincide, el servidor responde
404.
1.5 Un vistazo mínimo
program HolaEWeb;
{$mode objfpc}{$H+}
uses
WebAPI;
procedure Home(HCtx: Pointer);
var
Ctx: TEContext;
begin
Ctx := NewContext(HCtx);
try
Ctx.Text('Hola desde EWeb');
finally
Ctx.Free;
end;
end;
var
Router: TERouter;
Server: TEWebServer;
begin
Router := TERouter.Create;
Router.Get('/', @Home);
Server := TEWebServer.Create(Router);
Server.Listen(8080);
end.
Este es el esqueleto mínimo de cualquier aplicación EWeb. El resto del manual construye sobre esta base: enrutamiento con parámetros, plantillas HTML, sesiones, formularios protegidos con CSRF, persistencia con SQLite y manejo de contraseñas.
1.6 Ediciones: Community y Premium
EWeb se distribuye en dos ediciones con la misma API de uso:
| Característica | Community | Premium |
|---|---|---|
| Servidor Web / Router / Context Manager | ✅ | ✅ |
| HTML / JSON / Texto | ✅ | ✅ |
| Plantillas HTML (variables / if / range) | ✅ | ✅ |
| Servir archivos estáticos / Uploads | ✅ | ✅ |
| Session Manager / Password Manager (BCrypt) | ✅ | ✅ |
| CSRF / Logger | ✅ | ✅ |
| SQLite (EDB) | ✅ | ✅ |
| JWT encriptado | ❌ | ✅ |
| MariaDB / PostgreSQL (EDB) | ❌ | ✅ |
Pool de conexiones / Migraciones / .env | ❌ | ✅ |
| API Authentication avanzada / REST Helpers | ❌ | ✅ |
| Métricas / Soporte prioritario | ❌ | ✅ |
Este manual cubre la columna Community, que es la incluida en la libeweb.a de este paquete. Las capacidades marcadas como Premium se mencionan sólo como referencia de la hoja de ruta del producto.
--- Siguiente: 2. Instalación y compilación