Become a member!

DMVCFramework — Framework Delphi para REST API, JSON-RPC y Web Apps

🌐
Este artículo también está disponible en otros idiomas:
🇬🇧 English  •  🇮🇹 Italiano  •  🇩🇪 Deutsch

El framework Delphi open-source más popular en GitHub · Listo para producción desde 2010

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.

Logo DMVCFramework

GitHub starsGitHub last commitLicense
⬇️ Descargar Última Release ⭐ GitHub (1.3k+ estrellas)

Empieza: La Guía Oficial

DMVCFramework - 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

IdiomaFormatoEnlace
🇬🇧 IngléseBookComprar en Leanpub
🇬🇧 InglésTapa duraComprar en Lulu
🇧🇷 PortuguéseBookComprar en Leanpub
🇪🇸 EspañoleBookComprar en Leanpub

📖 Lee un Capítulo de Muestra Gratis - ¡Empieza en 5 minutos!


¿Por Qué Elegir DMVCFramework?

BeneficioDescripción
Probado en ProducciónUsado desde 2010 en proyectos pequeños, medianos y enterprise en todo el mundo
Conjunto Completo de CaracterísticasREST, JSON-RPC, JWT, WebSocket, SSE, ORM - todo lo que necesitas
Alta VelocidadOptimizado para alto rendimiento bajo cargas de trabajo pesadas
Fácil de AprenderAPI intuitiva con más de 50 ejemplos para ser productivo rápidamente
Comunidad ActivaMás de 6.000 desarrolladores en el grupo de Facebook listos para ayudar
Mantenido ActivamenteActualizaciones 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ónFechaPuntos Destacados
3.4.3-aluminiumEne 2026WebSocket, Rate Limiting, Repository Pattern, Delphi 13
3.4.2-magnesiumFeb 2024Middleware Sessions, Database Sessions
3.4.1-sodiumEne 2024Sempare Templates, Delphi 12, foVersion
3.4.0-neonSep 2023Functional Actions, Named Queries, HTMX
3.3.0-fluorineAbr 2023Delphi 11.3, Prometheus, Records en Swagger
3.2.3-radiumFeb 2022Profiler Integrado, JSONRPC TObject
3.2.2-nitrogenSep 2020Delphi 11, TMVCRESTClient, Cache LRU
3.2.1-carbonNov 2019Referencia Guía Oficial, snake_case
3.2.0-boronJul 2019Delphi 10.4, Swagger, Tipos Nullable
3.1.0-lithiumMar 2019Middleware Mejorado
3.0.0-hydrogen2018ORM MVCActiveRecord, Arquitectura 3.x
2.x2015-2017Serie 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 IMVCResponse usando helpers como OKResponse(), 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”

EjemploDescripción
basicdemo_serverSetup de servidor mínimo - empieza aquí
functional_actions_showcasePatrón moderno de functional actions
console_sampleAplicación de consola simple

“Quiero construir una REST API”

EjemploDescripción
simple_api_using_mvcactiverecordREST API con ORM
simple_api_using_repository_with_injectionRepository pattern + dependency injection
simple_api_using_datasetsRetorna TDataSet como JSON
routingParámetros URL, segmentos de path, query strings
validatorsValidadores de input integrados y custom
file_uploadManeja uploads multipart/form-data

“Quiero añadir autenticación y seguridad”

EjemploDescripción
jsonwebtokenBásicos de JSON Web Token
jsonwebtoken_roleauthAutorización basada en roles con JWT
middleware_jwtwithcookiehttponlyCookie HTTP-only segura para JWT
middleware_basicauthenticationAutenticación HTTP Basic
custom_authImplementa tu propio handler de auth
middleware_corsCross-Origin Resource Sharing
middleware_ratelimit_memoryThrottle de peticiones (in-memory)
middleware_ratelimit_redisThrottle de peticiones (basado en Redis)

“Quiero comunicación en tiempo real”

EjemploDescripción
websocket_primerIntroducción a WebSocket
websocket_chatAplicación de chat multi-usuario
websocket_groupsMensajería basada en canales
websocket_javascript_client_sampleEjemplo de cliente del navegador
serversenteventsServer-Sent Events (notificaciones push)

“Quiero renderizar páginas HTML”

EjemploDescripción
serversideviews_templateproHTML con motor TemplatePro
serversideviews_mustacheHTML con motor Mustache
htmxHTML dinámico con HTMX
htmx_website_with_templateproSitio web completo con HTMX + TemplatePro
htmx_website_with_webstencilsIntegración RAD Studio WebStencils

“Quiero trabajar con bases de datos”

EjemploDescripción
activerecord_showcaseDemo completa del ORM
activerecord_restful_crudAPI RESTful con ActiveRecord
master_detailsRelaciones parent-child
repository_showcaseUso de IMVCRepository
adoEjemplo Microsoft ADO

“Quiero usar JSON-RPC”

EjemploDescripción
jsonrpcImplementación de servidor JSON-RPC 2.0

“Quiero personalizar el manejo de request/response”

EjemploDescripción
middlewareCrea tu propio middleware
middleware_compressionRespuestas GZIP/Deflate
middleware_etagCaching HTTP con ETags
middleware_staticfilesSirve contenido estático
middleware_analyticsLogging/tracking de peticiones
middleware_activerecordConexión DB por-request
action_filtersHooks before/after action
custom_exception_handlingRespuestas de error custom
rendersSerializers JSON custom

“Quiero deployar a producción”

EjemploDescripción
windows_serviceEjecuta como servicio Windows
apache_moduleDeploy detrás de Apache
isapiDeploy en IIS
ssl_serverConfiguración HTTPS
tls13Setup TLS 1.3 moderno

“Quiero documentar mi API”

EjemploDescripción
swagger_primerBásicos de documentación OpenAPI
swagger_uiExplorador de API interactivo
swagger_doc_extendedCaracterísticas avanzadas de documentación

“Quiero características avanzadas”

EjemploDescripción
mvcasyncAcciones asíncronas
outputcachewithredisCache de respuesta basada en Redis
prometheusIntegración de monitoreo Prometheus
services_injectionDependency injection
dotenv_showcaseConfiguración de entorno con archivos .env
sqids_showcaseIDs únicos cortos (Sqids)


Proyectos Open Source Relacionados

DMVCFramework se integra perfectamente con otros proyectos open source del mismo autor:

ProyectoDescripciónUso con DMVCFramework
LoggerProFramework de logging asíncrono con más de 20 appendersAñade logging estructurado a tus APIs con appenders para archivo, base de datos, Redis o ElasticSearch
TemplateProPotente motor de plantillas con sintaxis similar a JinjaRendering HTML server-side con el ejemplo serversideviews_templatepro
DelphiRedisClientCliente Redis completoCaching, almacenamiento de sesiones, rate limiting y características en tiempo real
DelphiGuardGestión de memoria RAIICleanup automático de recursos en controllers y middleware
Delphi Fake Data UtilsGenerador de datos de pruebaGenera datos realistas para testing de APIs y demos
Expression EvaluatorParser de fórmulas en runtimeReglas de negocio dinámicas y campos calculados en tus APIs

Compatibilidad de Versiones Delphi

Versión DelphiWindowsLinux
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

Únete en Patreon →


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

RecursoEnlace
📦 Repositorio GitHubgithub.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 GratisLeer 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.


DMVCFramework - El framework Delphi #1 para Web API
Gratuito. Open-source. Listo para producción desde 2010.

⭐ Dale una estrella en GitHub 📖 Obtén la Guía Oficial
Datos clave

DMVCFramework (DelphiMVCFramework) es el framework open-source más popular para crear REST APIs y aplicaciones web en Delphi/Object Pascal.

  • Licencia: Apache 2.0 (gratuito para uso comercial)
  • En producción: Desde 2010
  • GitHub: Proyecto Delphi #1 por estrellas (1.300+)
  • Características: REST API (RMM Level 3), JSON-RPC 2.0, autenticación JWT, WebSocket, SSE, ORM MVCActiveRecord, dependency injection
  • Plataformas: Windows (consola, servicio, IIS, Apache), Linux (consola, daemon)
  • Versiones Delphi: desde 10 Seattle hasta 13 Florence
  • Documentación: Guía oficial disponible en inglés, portugués, español
  • Comunidad: 6.000+ desarrolladores en el grupo de Facebook
  • Autor: Daniele Teti (bit Time Professionals)
  • Casos de uso: REST APIs, microservicios, backends móviles, apps en tiempo real, aplicaciones web

Comments