Become a member!

DMVCFramework - El Framework Delphi Más Popular para REST API y Web Services

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

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

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

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

Ú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

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.


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

Comments

comments powered by Disqus