DMVCFramework - El Framework Delphi Más Popular para REST API y Web Services
TL;DR: DMVCFramework es el framework Delphi #1 para crear REST APIs y web services. Es gratuito (Apache 2.0), listo para producción desde 2010, soporta JWT, WebSocket, ORM y funciona en Windows/Linux. Instálalo desde GitHub, crea un controller con atributos
[MVCPath]y retorna objetos que se serializan automáticamente a JSON.
¿Qué es DMVCFramework?
DMVCFramework (DelphiMVCFramework) es el framework open-source más popular para crear web APIs y aplicaciones web en Delphi. Te permite crear servicios RESTful (RMM Level 3), servicios JSON-RPC, páginas web server-side, backends móviles y microservicios con facilidad.
Utilizado en producción desde 2010, DMVCFramework alimenta algunas de las web APIs Delphi con mayor tráfico del mundo. Es el proyecto Delphi #1 en GitHub por número de estrellas, con una comunidad vibrante de más de 5.000 desarrolladores activos.
Empieza: La Guía Oficial
La forma más rápida de dominar DMVCFramework es a través de la guía oficial. Este libro completo te lleva desde los fundamentos hasta el desarrollo de nivel profesional con ejemplos del mundo real y mejores prácticas.
Ediciones Disponibles
| Idioma | Formato | Enlace |
|---|---|---|
| 🇬🇧 Inglés | eBook | Comprar en Leanpub |
| 🇬🇧 Inglés | Tapa dura | Comprar en Lulu |
| 🇧🇷 Portugués | eBook | Comprar en Leanpub |
| 🇪🇸 Español | eBook | Comprar en Leanpub |
📖 Lee un Capítulo de Muestra Gratis - ¡Empieza en 5 minutos!
¿Por Qué Elegir DMVCFramework?
| Beneficio | Descripción |
|---|---|
| Probado en Producción | Usado desde 2010 en proyectos pequeños, medianos y enterprise en todo el mundo |
| Conjunto Completo de Características | REST, JSON-RPC, JWT, WebSocket, SSE, ORM - todo lo que necesitas |
| Alta Velocidad | Optimizado para alto rendimiento bajo cargas de trabajo pesadas |
| Fácil de Aprender | API intuitiva con más de 50 ejemplos para ser productivo rápidamente |
| Comunidad Activa | Más de 6.000 desarrolladores en el grupo de Facebook listos para ayudar |
| Mantenido Activamente | Actualizaciones regulares, versionado semántico, preparado para el futuro |
Novedades en DMVCFramework 3.4.3-aluminium
La última release trae importantes nuevas características:
Soporte WebSocket
Comunicación en tiempo real full-duplex con TMVCWebSocketServer y TMVCWebSocketClient. Construye aplicaciones de chat, dashboards en vivo y herramientas colaborativas con mensajería basada en canales y grupos.
Middleware Rate Limiting
Protege tus APIs contra abusos con rate limiting integrado - tanto in-memory para servidores individuales como basado en Redis para entornos distribuidos.
Repository Pattern
Arquitectura limpia con IMVCRepository<T> y [MVCInject] para dependency injection automática.
Soporte de Expresiones en dotEnv
Expresiones dinámicas en archivos de configuración .env con sustitución de variables y aritmética.
Ver todas las novedades de 3.4.3-aluminium →
Historial de Versiones
| Versión | Fecha | Puntos Destacados |
|---|---|---|
| 3.4.3-aluminium | Ene 2026 | WebSocket, Rate Limiting, Repository Pattern, Delphi 13 |
| 3.4.2-magnesium | Feb 2024 | Middleware Sessions, Database Sessions |
| 3.4.1-sodium | Ene 2024 | Sempare Templates, Delphi 12, foVersion |
| 3.4.0-neon | Sep 2023 | Functional Actions, Named Queries, HTMX |
| 3.3.0-fluorine | Abr 2023 | Delphi 11.3, Prometheus, Records en Swagger |
| 3.2.3-radium | Feb 2022 | Profiler Integrado, JSONRPC TObject |
| 3.2.2-nitrogen | Sep 2020 | Delphi 11, TMVCRESTClient, Cache LRU |
| 3.2.1-carbon | Nov 2019 | Referencia Guía Oficial, snake_case |
| 3.2.0-boron | Jul 2019 | Delphi 10.4, Swagger, Tipos Nullable |
| 3.1.0-lithium | Mar 2019 | Middleware Mejorado |
| 3.0.0-hydrogen | 2018 | ORM MVCActiveRecord, Arquitectura 3.x |
| 2.x | 2015-2017 | Serie Foundation |
Características Principales
Desarrollo de Web API
- APIs RESTful - Cumplimiento total RMM Level 3 con verbos HTTP y códigos de estado apropiados
- JSON-RPC 2.0 - Remoting automático de objetos para APIs estilo RPC
- Soporte OpenAPI - Generación automática de documentación de API
- Routing Automático - Mapeo de URLs basado en atributos con binding de parámetros
Autenticación y Seguridad
- Autenticación JWT - JSON Web Token estándar de la industria
- Autenticación HTTP Basic - Auth simple de usuario/contraseña
- Autenticación Custom - Framework flexible para cualquier esquema de auth
- Soporte CORS - Configuración de Cross-origin resource sharing
Comunicación en Tiempo Real
- Soporte WebSocket - Canales de comunicación full-duplex
- Server-Sent Events (SSE) - Notificaciones push a clientes
- Extensiones de Mensajería - Patrones pub/sub integrados
Datos y Persistencia
- MVCActiveRecord - ORM potente para operaciones de base de datos
- Serialización JSON - Mapeo automático objeto-a-JSON
- Serializers Custom - Control total sobre la transformación de datos
Flexibilidad de Deployment
- Aplicación de Consola Windows
- Servicio Windows
- Consola/Daemon Linux
- Módulo Apache (mod_proxy)
- IIS (DLL ISAPI)
- Entornos con load balancing
Experiencia del Desarrollador
- Wizard del IDE - Plantillas de proyecto para empezar rápido
- Más de 50 Ejemplos - Aprende cada característica con ejemplos funcionales
- Sistema de Middleware - Hooks fáciles para request/response
- Herencia de Controllers - Principio DRY para lógica común
- Cliente REST Integrado - Prueba y consume APIs fácilmente
Quick Start: Hello World
Empieza con DMVCFramework en minutos. Aquí hay un simple controller “Hello World”:
uses
MVCFramework, MVCFramework.Commons;
type
[MVCPath('/api')] // Ruta base para todas las acciones en este controller
TMyController = class(TMVCController)
public
[MVCPath('/hello')] // Ruta: GET /api/hello
[MVCHTTPMethods([httpGET])] // Método HTTP permitido
function GetHello: String;
[MVCPath('/hello/($Name)')] // Ruta: GET /api/hello/{Name}
[MVCHTTPMethods([httpGET])] // ($Name) captura el segmento de URL
function GetHelloName(const Name: String): String;
end;
implementation
function TMyController.GetHello: String;
begin
Result := 'Hello, World!'; // Serializado automáticamente a JSON
end;
function TMyController.GetHelloName(const Name: String): String;
begin
Result := 'Hello, ' + Name + '!'; // Name se extrae automáticamente de la URL
end;
¡Eso es todo! Llama a GET /api/hello y obtienes "Hello, World!". Llama a GET /api/hello/John y obtienes "Hello, John!".
DMVCFramework serializa automáticamente tus valores de retorno a JSON - strings, objetos, arrays, records, datasets - todo funciona automáticamente.
Ejemplo Avanzado: REST API con Base de Datos
Para aplicaciones del mundo real, DMVCFramework soporta el ORM MVCActiveRecord y el Repository pattern con dependency injection:
uses
MVCFramework, MVCFramework.Commons, MVCFramework.ActiveRecord,
MVCFramework.Repository, System.Generics.Collections;
type
// Clase Entity mapeada a la tabla de base de datos
[MVCTable('customers')]
TCustomer = class(TMVCActiveRecord)
private
[MVCTableField('id', [foPrimaryKey, foAutoGenerated])] // PK auto-increment
FID: NullableInt32;
[MVCTableField('name')] // Mapea a la columna 'name'
FName: string;
[MVCTableField('email')] // Mapea a la columna 'email'
FEmail: string;
public
property ID: NullableInt32 read FID write FID;
property Name: string read FName write FName;
property Email: string read FEmail write FEmail;
end;
[MVCPath('/api/customers')]
TCustomerController = class(TMVCController)
protected
fRepository: IMVCRepository<TCustomer>; // Interfaz Repository
public
[MVCInject] // Dependency injection - el repository se proporciona automáticamente
constructor Create(Repository: IMVCRepository<TCustomer>); reintroduce;
[MVCPath] // Ruta: GET /api/customers
[MVCHTTPMethods([httpGET])]
function GetAllCustomers: IMVCResponse;
[MVCPath('/($ID)')] // Ruta: GET /api/customers/{ID}
[MVCHTTPMethods([httpGET])]
function GetCustomerByID(const ID: Integer): IMVCResponse;
[MVCPath] // Ruta: POST /api/customers
[MVCHTTPMethods([httpPOST])] // [MVCFromBody] deserializa el body JSON a TCustomer
function CreateCustomer([MVCFromBody] const Customer: TCustomer): IMVCResponse;
[MVCPath('/($ID)')] // Ruta: DELETE /api/customers/{ID}
[MVCHTTPMethods([httpDELETE])]
function DeleteCustomerByID(const ID: Integer): IMVCResponse;
end;
implementation
constructor TCustomerController.Create(Repository: IMVCRepository<TCustomer>);
begin
inherited Create;
fRepository := Repository; // Almacena el repository inyectado
end;
function TCustomerController.GetAllCustomers: IMVCResponse;
begin
Result := OKResponse(fRepository.GetAll); // Retorna HTTP 200 con array JSON
end;
function TCustomerController.GetCustomerByID(const ID: Integer): IMVCResponse;
begin
Result := OKResponse(fRepository.GetByPK(ID)); // Retorna HTTP 200 con objeto JSON
end;
function TCustomerController.CreateCustomer(const Customer: TCustomer): IMVCResponse;
begin
fRepository.Store(Customer); // Insert o update basado en la PK
Result := CreatedResponse('/api/customers/' + Customer.ID.Value.ToString); // HTTP 201
end;
function TCustomerController.DeleteCustomerByID(const ID: Integer): IMVCResponse;
var
lCustomer: TCustomer;
begin
lCustomer := fRepository.GetByPK(ID); // Carga la entity por primary key
fRepository.Delete(lCustomer); // Elimina de la base de datos
Result := OKResponse; // Retorna HTTP 200
end;
Beneficios clave:
- Functional actions: Retorna
IMVCResponseusando helpers comoOKResponse(),CreatedResponse() - Dependency injection:
[MVCInject]en el constructor para inyección automática del repository - MVCActiveRecord: ORM con mapeo de tablas vía atributos
- Repository pattern:
IMVCRepository<T>para acceso a datos limpio y testeable - Auto-serialización: Objetos, records, listas, datasets se serializan automáticamente
Aprende con Ejemplos: Más de 100 Proyectos de Ejemplo
La mejor forma de aprender DMVCFramework es explorando código funcional. El proyecto incluye más de 100 proyectos de ejemplo que cubren cada característica y caso de uso. Cada ejemplo es autónomo y listo para compilar.
¡Encuentra el ejemplo que coincida con lo que necesitas construir, ábrelo en Delphi y empieza a experimentar!
📦 Todos los ejemplos: github.com/danieleteti/delphimvcframework/tree/master/samples
“Quiero crear mi primer proyecto DMVCFramework”
| Ejemplo | Descripción |
|---|---|
basicdemo_server |
Setup de servidor mínimo - empieza aquí |
functional_actions_showcase |
Patrón moderno de functional actions |
console_sample |
Aplicación de consola simple |
“Quiero construir una REST API”
| Ejemplo | Descripción |
|---|---|
simple_api_using_mvcactiverecord |
REST API con ORM |
simple_api_using_repository_with_injection |
Repository pattern + dependency injection |
simple_api_using_datasets |
Retorna TDataSet como JSON |
routing |
Parámetros URL, segmentos de path, query strings |
validators |
Validadores de input integrados y custom |
file_upload |
Maneja uploads multipart/form-data |
“Quiero añadir autenticación y seguridad”
| Ejemplo | Descripción |
|---|---|
jsonwebtoken |
Básicos de JSON Web Token |
jsonwebtoken_roleauth |
Autorización basada en roles con JWT |
middleware_jwtwithcookiehttponly |
Cookie HTTP-only segura para JWT |
middleware_basicauthentication |
Autenticación HTTP Basic |
custom_auth |
Implementa tu propio handler de auth |
middleware_cors |
Cross-Origin Resource Sharing |
middleware_ratelimit_memory |
Throttle de peticiones (in-memory) |
middleware_ratelimit_redis |
Throttle de peticiones (basado en Redis) |
“Quiero comunicación en tiempo real”
| Ejemplo | Descripción |
|---|---|
websocket_primer |
Introducción a WebSocket |
websocket_chat |
Aplicación de chat multi-usuario |
websocket_groups |
Mensajería basada en canales |
websocket_javascript_client_sample |
Ejemplo de cliente del navegador |
serversentevents |
Server-Sent Events (notificaciones push) |
“Quiero renderizar páginas HTML”
| Ejemplo | Descripción |
|---|---|
serversideviews_templatepro |
HTML con motor TemplatePro |
serversideviews_mustache |
HTML con motor Mustache |
htmx |
HTML dinámico con HTMX |
htmx_website_with_templatepro |
Sitio web completo con HTMX + TemplatePro |
htmx_website_with_webstencils |
Integración RAD Studio WebStencils |
“Quiero trabajar con bases de datos”
| Ejemplo | Descripción |
|---|---|
activerecord_showcase |
Demo completa del ORM |
activerecord_restful_crud |
API RESTful con ActiveRecord |
master_details |
Relaciones parent-child |
repository_showcase |
Uso de IMVCRepository |
ado |
Ejemplo Microsoft ADO |
“Quiero usar JSON-RPC”
| Ejemplo | Descripción |
|---|---|
jsonrpc |
Implementación de servidor JSON-RPC 2.0 |
“Quiero personalizar el manejo de request/response”
| Ejemplo | Descripción |
|---|---|
middleware |
Crea tu propio middleware |
middleware_compression |
Respuestas GZIP/Deflate |
middleware_etag |
Caching HTTP con ETags |
middleware_staticfiles |
Sirve contenido estático |
middleware_analytics |
Logging/tracking de peticiones |
middleware_activerecord |
Conexión DB por-request |
action_filters |
Hooks before/after action |
custom_exception_handling |
Respuestas de error custom |
renders |
Serializers JSON custom |
“Quiero deployar a producción”
| Ejemplo | Descripción |
|---|---|
windows_service |
Ejecuta como servicio Windows |
apache_module |
Deploy detrás de Apache |
isapi |
Deploy en IIS |
ssl_server |
Configuración HTTPS |
tls13 |
Setup TLS 1.3 moderno |
“Quiero documentar mi API”
| Ejemplo | Descripción |
|---|---|
swagger_primer |
Básicos de documentación OpenAPI |
swagger_ui |
Explorador de API interactivo |
swagger_doc_extended |
Características avanzadas de documentación |
“Quiero características avanzadas”
| Ejemplo | Descripción |
|---|---|
mvcasync |
Acciones asíncronas |
outputcachewithredis |
Cache de respuesta basada en Redis |
prometheus |
Integración de monitoreo Prometheus |
services_injection |
Dependency injection |
dotenv_showcase |
Configuración de entorno con archivos .env |
sqids_showcase |
IDs únicos cortos (Sqids) |
Proyectos Open Source Relacionados
DMVCFramework se integra perfectamente con otros proyectos open source del mismo autor:
| Proyecto | Descripción | Uso con DMVCFramework |
|---|---|---|
| LoggerPro | Framework de logging asíncrono con más de 20 appenders | Añade logging estructurado a tus APIs con appenders para archivo, base de datos, Redis o ElasticSearch |
| TemplatePro | Potente motor de plantillas con sintaxis similar a Jinja | Rendering HTML server-side con el ejemplo serversideviews_templatepro |
| DelphiRedisClient | Cliente Redis completo | Caching, almacenamiento de sesiones, rate limiting y características en tiempo real |
| DelphiGuard | Gestión de memoria RAII | Cleanup automático de recursos en controllers y middleware |
| Delphi Fake Data Utils | Generador de datos de prueba | Genera datos realistas para testing de APIs y demos |
| Expression Evaluator | Parser de fórmulas en runtime | Reglas de negocio dinámicas y campos calculados en tus APIs |
Compatibilidad de Versiones Delphi
| Versión Delphi | Windows | Linux |
|---|---|---|
| Delphi 13 Florence | ✅ | ✅ |
| Delphi 12 Athens | ✅ | ✅ |
| Delphi 11 Alexandria | ✅ | ✅ |
| Delphi 10.4 Sydney | ✅ | ✅ |
| Delphi 10.3 Rio | ✅ | ✅ |
| Delphi 10.2 Tokyo | ✅ | ✅ |
| Delphi 10.1 Berlin | ✅ | - |
| Delphi 10 Seattle | ✅ | - |
Apoya el Proyecto
🎁 Conviértete en un Patron Supporter
DMVCFramework es gratuito y open-source, pero mantenerlo y mejorarlo requiere un esfuerzo significativo. Al convertirte en Patron:
- Accede a Contenido Premium - Tutoriales exclusivos, ejemplos avanzados y vistas previas
- Acceso Directo al Desarrollador - Soporte prioritario y comunicación directa con el equipo de desarrollo
- Moldea el Futuro - Influye en la roadmap y las prioridades de características
- Apoya el Open Source - Ayuda a mantener DMVCFramework gratuito para todos
Servicios Profesionales
¿Necesitas soporte de nivel enterprise? bit Time Professionals, la empresa detrás de DMVCFramework, ofrece:
- Cursos de Formación - Formación presencial o remota para tu equipo
- Consultoría - Revisión de arquitectura, optimización de rendimiento, mejores prácticas
- Desarrollo Custom - Desarrollo de características, integración, migración
📧 Contacto: dmvcframework@bittime.it | 🌐 bittimeprofessionals.it
Comunidad y Recursos
| Recurso | Enlace |
|---|---|
| 📦 Repositorio GitHub | github.com/danieleteti/delphimvcframework |
| 📕 Guía Oficial (Libro) | leanpub.com/delphimvcframework |
| 👥 Grupo de Facebook (5.000+ miembros) | facebook.com/groups/delphimvcframework |
| 🎁 Patreon (Contenido Premium) | patreon.com/delphimvcframework |
| 📖 Capítulo de Muestra Gratis | Leer en Leanpub |
FAQ: Preguntas Frecuentes
¿Qué es DMVCFramework?
DMVCFramework (DelphiMVCFramework) es un framework open-source para crear web APIs, servicios RESTful y aplicaciones web en Delphi. Es el framework web Delphi más popular, usado en producción desde 2010, y es el proyecto Delphi #1 en GitHub por número de estrellas.
¿Cuál es el mejor framework para REST API en Delphi?
DMVCFramework es el framework más popular y completo para crear REST APIs en Delphi. Soporta APIs RESTful (RMM Level 3), JSON-RPC, WebSocket, Server-Sent Events, autenticación JWT e incluye un potente ORM llamado MVCActiveRecord.
¿Cómo se crea una REST API en Delphi?
Usa DMVCFramework: crea una clase controller que herede de TMVCController, añade los atributos [MVCPath] y [MVCHTTPMethods] para definir las rutas, y retorna datos directamente desde tus métodos (functional actions). El framework serializa automáticamente objetos, arrays y records a JSON. Mira los más de 100 ejemplos incluidos.
¿Cómo retorno JSON desde una REST API Delphi?
Con DMVCFramework, simplemente retorna un objeto, record o TObjectList<T> desde tu método controller. El framework lo serializa automáticamente a JSON. Para mayor control, usa los helpers OKResponse(data) o CreatedResponse(location).
¿Soporta DMVCFramework la autenticación JWT?
Sí, DMVCFramework tiene soporte JWT (JSON Web Token) integrado para autenticación stateless. Soporta generación de tokens, validación, autorización basada en roles y cookies HTTP-only seguras. Mira los ejemplos jsonwebtoken y jsonwebtoken_roleauth.
¿Puedo usar DMVCFramework en Linux?
Sí, DMVCFramework soporta completamente el deployment en Linux a partir de Delphi 10.2 Tokyo. Puedes deployar como aplicación de consola o daemon, con soporte completo para todas las características incluyendo WebSocket y SSL/TLS.
¿Es DMVCFramework gratuito?
Sí, DMVCFramework es gratuito y open-source bajo licencia Apache 2.0. Puedes usarlo en proyectos comerciales sin restricciones o requisitos de atribución.
¿Cómo obtengo soporte para DMVCFramework?
Hay varias opciones de soporte disponibles: únete al grupo de Facebook (más de 5.000 miembros), explora los más de 100 ejemplos incluidos en el proyecto, lee el libro de guía oficial, o conviértete en Patron para soporte prioritario y contenido exclusivo.
¿Soporta DMVCFramework WebSocket?
Sí, DMVCFramework incluye soporte WebSocket completo para comunicación bidireccional en tiempo real. Las características incluyen mensajería basada en canales, grupos y ejemplos de cliente JavaScript. También soporta Server-Sent Events (SSE) para notificaciones push servidor-a-cliente.
¿Qué es MVCActiveRecord?
MVCActiveRecord es el ORM (Object-Relational Mapper) integrado en DMVCFramework que simplifica las operaciones de base de datos. Usa atributos para el mapeo de tablas/columnas, soporta operaciones CRUD, relaciones y RQL (Resource Query Language) para consultas flexibles.
¿Cómo deployo DMVCFramework en producción?
DMVCFramework soporta varias opciones de deployment: aplicación de consola Windows, Servicio Windows, daemon Linux, módulo Apache (mod_proxy), IIS (DLL ISAPI) y entornos con load balancing. Mira los ejemplos de deployment para cada escenario.
¿Soporta DMVCFramework OpenAPI/Swagger?
Sí, DMVCFramework puede generar automáticamente documentación OpenAPI (Swagger) para tus APIs. Usa los ejemplos swagger_primer y swagger_ui para añadir documentación de API interactiva a tu proyecto.
¿Cómo manejo la subida de archivos en DMVCFramework?
Usa el objeto Context.Request para acceder a los archivos subidos. El ejemplo file_upload demuestra el manejo de peticiones multipart/form-data con subidas de archivos individuales o múltiples.
¿Puedo usar DMVCFramework con FireDAC?
Sí, DMVCFramework funciona con cualquier capa de acceso a datos incluyendo FireDAC, ADO y otros. MVCActiveRecord usa FireDAC por defecto, pero puedes usar cualquier conexión que prefieras.
¿Cómo implemento CORS en DMVCFramework?
Usa el middleware CORS integrado. Añade TMVCCORSMiddleware a la configuración de tu servidor para habilitar peticiones cross-origin. Mira el ejemplo middleware_cors para las opciones de configuración.
¿Qué versiones de Delphi soporta DMVCFramework?
DMVCFramework soporta desde Delphi 10 Seattle hasta Delphi 13 Florence, incluyendo soporte completo para Linux desde Delphi 10.2 Tokyo en adelante.
¿Cómo manejo errores y excepciones en DMVCFramework?
DMVCFramework convierte automáticamente las excepciones en respuestas de error HTTP apropiadas con body JSON. Para manejo de errores custom, usa raise EMVCException.Create() con códigos de estado HTTP específicos, o implementa handlers de excepciones custom.
¿Soporta DMVCFramework la dependency injection?
Sí, DMVCFramework tiene dependency injection integrada. Usa el atributo [MVCInject] en constructores o parámetros de método para inyectar automáticamente servicios y repositories. Mira el ejemplo services_injection.
Gratuito. Open-source. Listo para producción desde 2010.
⭐ Dale una estrella en GitHub 📖 Obtén la Guía Oficial
Comments
comments powered by Disqus