DMVCFramework - Il Framework Delphi Più Popolare per REST API e Web Services
TL;DR: DMVCFramework è il framework Delphi #1 per creare REST API e web services. È gratuito (Apache 2.0), pronto per la produzione dal 2010, supporta JWT, WebSocket, ORM e funziona su Windows/Linux. Installalo da GitHub, crea un controller con attributi
[MVCPath]e restituisci oggetti che vengono serializzati automaticamente in JSON.
Cos’è DMVCFramework?
DMVCFramework (DelphiMVCFramework) è il framework open-source più popolare per creare web API e applicazioni web in Delphi. Ti permette di creare servizi RESTful (RMM Level 3), servizi JSON-RPC, pagine web server-side, backend mobile e microservizi con facilità.
Utilizzato in produzione dal 2010, DMVCFramework alimenta alcune delle web API Delphi con il traffico più alto al mondo. È il progetto Delphi #1 su GitHub per numero di stelle, con una community vivace di oltre 5.000 sviluppatori attivi.
Inizia: La Guida Ufficiale
Il modo più veloce per padroneggiare DMVCFramework è attraverso la guida ufficiale. Questo libro completo ti porta dalle basi allo sviluppo di livello professionale con esempi reali e best practice.
Edizioni Disponibili
| Lingua | Formato | Link |
|---|---|---|
| 🇬🇧 Inglese | eBook | Acquista su Leanpub |
| 🇬🇧 Inglese | Copertina rigida | Acquista su Lulu |
| 🇧🇷 Portoghese | eBook | Acquista su Leanpub |
| 🇪🇸 Spagnolo | eBook | Acquista su Leanpub |
📖 Leggi un Capitolo di Esempio Gratuito - Inizia in 5 minuti!
Perché Scegliere DMVCFramework?
| Beneficio | Descrizione |
|---|---|
| Provato in Produzione | Usato dal 2010 in progetti piccoli, medi ed enterprise in tutto il mondo |
| Set di Funzionalità Completo | REST, JSON-RPC, JWT, WebSocket, SSE, ORM - tutto ciò di cui hai bisogno |
| Velocità Elevata | Ottimizzato per alte performance sotto carichi di lavoro pesanti |
| Facile da Imparare | API intuitiva con oltre 50 esempi per diventare produttivo rapidamente |
| Community Attiva | Oltre 6.000 sviluppatori nel gruppo Facebook pronti ad aiutare |
| Mantenuto Attivamente | Aggiornamenti regolari, versioning semantico, a prova di futuro |
Novità in DMVCFramework 3.4.3-aluminium
L’ultima release porta importanti nuove funzionalità:
Supporto WebSocket
Comunicazione real-time full-duplex con TMVCWebSocketServer e TMVCWebSocketClient. Costruisci applicazioni chat, dashboard live e strumenti collaborativi con messaggistica basata su canali e gruppi.
Middleware Rate Limiting
Proteggi le tue API dagli abusi con rate limiting integrato - sia in-memory per server singoli che basato su Redis per ambienti distribuiti.
Repository Pattern
Architettura pulita con IMVCRepository<T> e [MVCInject] per la dependency injection automatica.
Supporto Espressioni in dotEnv
Espressioni dinamiche nei file di configurazione .env con sostituzione variabili e aritmetica.
Vedi tutte le novità della 3.4.3-aluminium →
Cronologia Versioni
| Versione | Data | Punti Salienti |
|---|---|---|
| 3.4.3-aluminium | Gen 2026 | WebSocket, Rate Limiting, Repository Pattern, Delphi 13 |
| 3.4.2-magnesium | Feb 2024 | Middleware Sessions, Database Sessions |
| 3.4.1-sodium | Gen 2024 | Sempare Templates, Delphi 12, foVersion |
| 3.4.0-neon | Set 2023 | Functional Actions, Named Queries, HTMX |
| 3.3.0-fluorine | Apr 2023 | Delphi 11.3, Prometheus, Record in Swagger |
| 3.2.3-radium | Feb 2022 | Profiler Integrato, JSONRPC TObject |
| 3.2.2-nitrogen | Set 2020 | Delphi 11, TMVCRESTClient, Cache LRU |
| 3.2.1-carbon | Nov 2019 | Riferimento Guida Ufficiale, snake_case |
| 3.2.0-boron | Lug 2019 | Delphi 10.4, Swagger, Tipi Nullable |
| 3.1.0-lithium | Mar 2019 | Middleware Migliorato |
| 3.0.0-hydrogen | 2018 | ORM MVCActiveRecord, Architettura 3.x |
| 2.x | 2015-2017 | Serie Foundation |
Funzionalità Principali
Sviluppo Web API
- API RESTful - Piena conformità RMM Level 3 con verbi HTTP e codici di stato appropriati
- JSON-RPC 2.0 - Remoting automatico di oggetti per API in stile RPC
- Supporto OpenAPI - Generazione automatica della documentazione API
- Routing Automatico - Mapping URL basato su attributi con binding dei parametri
Autenticazione e Sicurezza
- Autenticazione JWT - JSON Web Token standard di settore
- Autenticazione HTTP Basic - Semplice auth username/password
- Autenticazione Custom - Framework flessibile per qualsiasi schema di auth
- Supporto CORS - Configurazione Cross-origin resource sharing
Comunicazione Real-Time
- Supporto WebSocket - Canali di comunicazione full-duplex
- Server-Sent Events (SSE) - Notifiche push ai client
- Estensioni Messaging - Pattern pub/sub integrati
Dati e Persistenza
- MVCActiveRecord - ORM potente per operazioni database
- Serializzazione JSON - Mapping automatico oggetto-to-JSON
- Serializer Custom - Controllo completo sulla trasformazione dei dati
Flessibilità di Deployment
- Applicazione Console Windows
- Servizio Windows
- Console/Daemon Linux
- Modulo Apache (mod_proxy)
- IIS (DLL ISAPI)
- Ambienti con load balancing
Esperienza Sviluppatore
- Wizard IDE - Template di progetto per partire velocemente
- Oltre 50 Esempi - Impara ogni funzionalità con esempi funzionanti
- Sistema Middleware - Hook facili per request/response
- Ereditarietà Controller - Principio DRY per logica comune
- Client REST Integrato - Testa e consuma API facilmente
Quick Start: Hello World
Inizia con DMVCFramework in pochi minuti. Ecco un semplice controller “Hello World”:
uses
MVCFramework, MVCFramework.Commons;
type
[MVCPath('/api')] // Percorso base per tutte le azioni in questo controller
TMyController = class(TMVCController)
public
[MVCPath('/hello')] // Route: GET /api/hello
[MVCHTTPMethods([httpGET])] // Metodo HTTP permesso
function GetHello: String;
[MVCPath('/hello/($Name)')] // Route: GET /api/hello/{Name}
[MVCHTTPMethods([httpGET])] // ($Name) cattura il segmento URL
function GetHelloName(const Name: String): String;
end;
implementation
function TMyController.GetHello: String;
begin
Result := 'Hello, World!'; // Serializzato automaticamente in JSON
end;
function TMyController.GetHelloName(const Name: String): String;
begin
Result := 'Hello, ' + Name + '!'; // Name è estratto automaticamente dall'URL
end;
Ecco fatto! Chiama GET /api/hello e ottieni "Hello, World!". Chiama GET /api/hello/John e ottieni "Hello, John!".
DMVCFramework serializza automaticamente i tuoi valori di ritorno in JSON - stringhe, oggetti, array, record, dataset - tutto funziona automaticamente.
Esempio Avanzato: REST API con Database
Per applicazioni reali, DMVCFramework supporta l’ORM MVCActiveRecord e il Repository pattern con dependency injection:
uses
MVCFramework, MVCFramework.Commons, MVCFramework.ActiveRecord,
MVCFramework.Repository, System.Generics.Collections;
type
// Classe Entity mappata alla tabella del database
[MVCTable('customers')]
TCustomer = class(TMVCActiveRecord)
private
[MVCTableField('id', [foPrimaryKey, foAutoGenerated])] // PK auto-increment
FID: NullableInt32;
[MVCTableField('name')] // Mappa alla colonna 'name'
FName: string;
[MVCTableField('email')] // Mappa alla colonna '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>; // Interfaccia Repository
public
[MVCInject] // Dependency injection - il repository viene fornito automaticamente
constructor Create(Repository: IMVCRepository<TCustomer>); reintroduce;
[MVCPath] // Route: GET /api/customers
[MVCHTTPMethods([httpGET])]
function GetAllCustomers: IMVCResponse;
[MVCPath('/($ID)')] // Route: GET /api/customers/{ID}
[MVCHTTPMethods([httpGET])]
function GetCustomerByID(const ID: Integer): IMVCResponse;
[MVCPath] // Route: POST /api/customers
[MVCHTTPMethods([httpPOST])] // [MVCFromBody] deserializza il body JSON in TCustomer
function CreateCustomer([MVCFromBody] const Customer: TCustomer): IMVCResponse;
[MVCPath('/($ID)')] // Route: 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; // Memorizza il repository iniettato
end;
function TCustomerController.GetAllCustomers: IMVCResponse;
begin
Result := OKResponse(fRepository.GetAll); // Restituisce HTTP 200 con array JSON
end;
function TCustomerController.GetCustomerByID(const ID: Integer): IMVCResponse;
begin
Result := OKResponse(fRepository.GetByPK(ID)); // Restituisce HTTP 200 con oggetto JSON
end;
function TCustomerController.CreateCustomer(const Customer: TCustomer): IMVCResponse;
begin
fRepository.Store(Customer); // Insert o update basato sulla 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); // Carica l'entity dalla primary key
fRepository.Delete(lCustomer); // Elimina dal database
Result := OKResponse; // Restituisce HTTP 200
end;
Benefici chiave:
- Functional actions: Restituisci
IMVCResponseusando helper comeOKResponse(),CreatedResponse() - Dependency injection:
[MVCInject]sul costruttore per injection automatica del repository - MVCActiveRecord: ORM con mapping tabelle via attributi
- Repository pattern:
IMVCRepository<T>per accesso ai dati pulito e testabile - Auto-serializzazione: Oggetti, record, liste, dataset vengono serializzati automaticamente
Impara con gli Esempi: Oltre 100 Progetti di Esempio
Il modo migliore per imparare DMVCFramework è esplorare codice funzionante. Il progetto include oltre 100 progetti di esempio che coprono ogni funzionalità e caso d’uso. Ogni esempio è autonomo e pronto per essere compilato.
Trova l’esempio che corrisponde a ciò che devi costruire, aprilo in Delphi e inizia a sperimentare!
📦 Tutti gli esempi: github.com/danieleteti/delphimvcframework/tree/master/samples
“Voglio creare il mio primo progetto DMVCFramework”
| Esempio | Descrizione |
|---|---|
basicdemo_server |
Setup server minimale - inizia da qui |
functional_actions_showcase |
Pattern moderno delle functional actions |
console_sample |
Semplice applicazione console |
“Voglio costruire una REST API”
| Esempio | Descrizione |
|---|---|
simple_api_using_mvcactiverecord |
REST API con ORM |
simple_api_using_repository_with_injection |
Repository pattern + dependency injection |
simple_api_using_datasets |
Restituisci TDataSet come JSON |
routing |
Parametri URL, segmenti di path, query string |
validators |
Validatori di input integrati e custom |
file_upload |
Gestisci upload multipart/form-data |
“Voglio aggiungere autenticazione e sicurezza”
| Esempio | Descrizione |
|---|---|
jsonwebtoken |
Basi dei JSON Web Token |
jsonwebtoken_roleauth |
Autorizzazione basata sui ruoli con JWT |
middleware_jwtwithcookiehttponly |
Cookie HTTP-only sicuro per JWT |
middleware_basicauthentication |
Autenticazione HTTP Basic |
custom_auth |
Implementa il tuo handler di auth |
middleware_cors |
Cross-Origin Resource Sharing |
middleware_ratelimit_memory |
Throttle richieste (in-memory) |
middleware_ratelimit_redis |
Throttle richieste (basato su Redis) |
“Voglio comunicazione real-time”
| Esempio | Descrizione |
|---|---|
websocket_primer |
Introduzione ai WebSocket |
websocket_chat |
Applicazione chat multi-utente |
websocket_groups |
Messaggistica basata su canali |
websocket_javascript_client_sample |
Esempio client browser |
serversentevents |
Server-Sent Events (notifiche push) |
“Voglio renderizzare pagine HTML”
| Esempio | Descrizione |
|---|---|
serversideviews_templatepro |
HTML con motore TemplatePro |
serversideviews_mustache |
HTML con motore Mustache |
htmx |
HTML dinamico con HTMX |
htmx_website_with_templatepro |
Sito web completo con HTMX + TemplatePro |
htmx_website_with_webstencils |
Integrazione RAD Studio WebStencils |
“Voglio lavorare con i database”
| Esempio | Descrizione |
|---|---|
activerecord_showcase |
Demo ORM completa |
activerecord_restful_crud |
API RESTful con ActiveRecord |
master_details |
Relazioni parent-child |
repository_showcase |
Uso di IMVCRepository |
ado |
Esempio Microsoft ADO |
“Voglio usare JSON-RPC”
| Esempio | Descrizione |
|---|---|
jsonrpc |
Implementazione server JSON-RPC 2.0 |
“Voglio personalizzare la gestione request/response”
| Esempio | Descrizione |
|---|---|
middleware |
Crea il tuo middleware |
middleware_compression |
Response GZIP/Deflate |
middleware_etag |
Caching HTTP con ETag |
middleware_staticfiles |
Servi contenuto statico |
middleware_analytics |
Logging/tracking richieste |
middleware_activerecord |
Connessione DB per-request |
action_filters |
Hook before/after action |
custom_exception_handling |
Response di errore custom |
renders |
Serializer JSON custom |
“Voglio deployare in produzione”
| Esempio | Descrizione |
|---|---|
windows_service |
Esegui come servizio Windows |
apache_module |
Deploy dietro Apache |
isapi |
Deploy su IIS |
ssl_server |
Configurazione HTTPS |
tls13 |
Setup TLS 1.3 moderno |
“Voglio documentare la mia API”
| Esempio | Descrizione |
|---|---|
swagger_primer |
Basi documentazione OpenAPI |
swagger_ui |
Explorer API interattivo |
swagger_doc_extended |
Funzionalità documentazione avanzate |
“Voglio funzionalità avanzate”
| Esempio | Descrizione |
|---|---|
mvcasync |
Azioni asincrone |
outputcachewithredis |
Cache response basata su Redis |
prometheus |
Integrazione monitoring Prometheus |
services_injection |
Dependency injection |
dotenv_showcase |
Configurazione ambiente con file .env |
sqids_showcase |
ID unici brevi (Sqids) |
Progetti Open Source Correlati
DMVCFramework si integra perfettamente con altri progetti open source dello stesso autore:
| Progetto | Descrizione | Uso con DMVCFramework |
|---|---|---|
| LoggerPro | Framework di logging asincrono con oltre 20 appender | Aggiungi logging strutturato alle tue API con appender per file, database, Redis o ElasticSearch |
| TemplatePro | Potente motore di template con sintassi simile a Jinja | Rendering HTML server-side con l’esempio serversideviews_templatepro |
| DelphiRedisClient | Client Redis completo | Caching, storage sessioni, rate limiting e funzionalità real-time |
| DelphiGuard | Gestione memoria RAII | Cleanup automatico delle risorse in controller e middleware |
| Delphi Fake Data Utils | Generatore di dati di test | Genera dati realistici per testing API e demo |
| Expression Evaluator | Parser di formule runtime | Regole di business dinamiche e campi calcolati nelle tue API |
Compatibilità Versioni Delphi
| Versione 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 | ✅ | - |
Supporta il Progetto
🎁 Diventa un Patron Supporter
DMVCFramework è gratuito e open-source, ma mantenerlo e migliorarlo richiede uno sforzo significativo. Diventando un Patron:
- Accedi a Contenuti Premium - Tutorial esclusivi, esempi avanzati e anteprime
- Accesso Diretto allo Sviluppatore - Supporto prioritario e comunicazione diretta con il team di sviluppo
- Plasma il Futuro - Influenza la roadmap e le priorità delle funzionalità
- Supporta l'Open Source - Aiuta a mantenere DMVCFramework gratuito per tutti
Servizi Professionali
Hai bisogno di supporto enterprise-grade? bit Time Professionals, l’azienda dietro DMVCFramework, offre:
- Corsi di Formazione - Formazione on-site o remota per il tuo team
- Consulenza - Review architetturale, ottimizzazione performance, best practice
- Sviluppo Custom - Sviluppo funzionalità, integrazione, migrazione
📧 Contatto: dmvcframework@bittime.it | 🌐 bittimeprofessionals.it
Community e Risorse
| Risorsa | Link |
|---|---|
| 📦 Repository GitHub | github.com/danieleteti/delphimvcframework |
| 📕 Guida Ufficiale (Libro) | leanpub.com/delphimvcframework |
| 👥 Gruppo Facebook (5.000+ membri) | facebook.com/groups/delphimvcframework |
| 🎁 Patreon (Contenuti Premium) | patreon.com/delphimvcframework |
| 📖 Capitolo di Esempio Gratuito | Leggi su Leanpub |
FAQ: Domande Frequenti
Cos’è DMVCFramework?
DMVCFramework (DelphiMVCFramework) è un framework open-source per creare web API, servizi RESTful e applicazioni web in Delphi. È il framework web Delphi più popolare, usato in produzione dal 2010, ed è il progetto Delphi #1 su GitHub per numero di stelle.
Qual è il miglior framework per REST API in Delphi?
DMVCFramework è il framework più popolare e completo per creare REST API in Delphi. Supporta API RESTful (RMM Level 3), JSON-RPC, WebSocket, Server-Sent Events, autenticazione JWT e include un potente ORM chiamato MVCActiveRecord.
Come si crea una REST API in Delphi?
Usa DMVCFramework: crea una classe controller che eredita da TMVCController, aggiungi gli attributi [MVCPath] e [MVCHTTPMethods] per definire le route, e restituisci i dati direttamente dai tuoi metodi (functional actions). Il framework serializza automaticamente oggetti, array e record in JSON. Vedi gli oltre 100 esempi inclusi.
Come restituisco JSON da una REST API Delphi?
Con DMVCFramework, restituisci semplicemente un oggetto, record o TObjectList<T> dal tuo metodo controller. Il framework lo serializza automaticamente in JSON. Per maggior controllo, usa gli helper OKResponse(data) o CreatedResponse(location).
DMVCFramework supporta l’autenticazione JWT?
Sì, DMVCFramework ha supporto JWT (JSON Web Token) integrato per l’autenticazione stateless. Supporta generazione token, validazione, autorizzazione basata sui ruoli e cookie HTTP-only sicuri. Vedi gli esempi jsonwebtoken e jsonwebtoken_roleauth.
Posso usare DMVCFramework su Linux?
Sì, DMVCFramework supporta completamente il deployment su Linux a partire da Delphi 10.2 Tokyo. Puoi deployare come applicazione console o daemon, con supporto completo per tutte le funzionalità inclusi WebSocket e SSL/TLS.
DMVCFramework è gratuito?
Sì, DMVCFramework è gratuito e open-source sotto licenza Apache 2.0. Puoi usarlo in progetti commerciali senza restrizioni o requisiti di attribuzione.
Come ottengo supporto per DMVCFramework?
Sono disponibili diverse opzioni di supporto: unisciti al gruppo Facebook (oltre 5.000 membri), esplora gli oltre 100 esempi inclusi nel progetto, leggi il libro guida ufficiale, o diventa un Patron per supporto prioritario e contenuti esclusivi.
DMVCFramework supporta WebSocket?
Sì, DMVCFramework include supporto WebSocket completo per comunicazione bidirezionale real-time. Le funzionalità includono messaggistica basata su canali, gruppi ed esempi di client JavaScript. Supporta anche Server-Sent Events (SSE) per notifiche push server-to-client.
Cos’è MVCActiveRecord?
MVCActiveRecord è l’ORM (Object-Relational Mapper) integrato in DMVCFramework che semplifica le operazioni database. Usa attributi per il mapping tabelle/colonne, supporta operazioni CRUD, relazioni e RQL (Resource Query Language) per query flessibili.
Come deployo DMVCFramework in produzione?
DMVCFramework supporta diverse opzioni di deployment: applicazione console Windows, Servizio Windows, daemon Linux, modulo Apache (mod_proxy), IIS (DLL ISAPI) e ambienti con load balancing. Vedi gli esempi di deployment per ogni scenario.
DMVCFramework supporta OpenAPI/Swagger?
Sì, DMVCFramework può generare automaticamente documentazione OpenAPI (Swagger) per le tue API. Usa gli esempi swagger_primer e swagger_ui per aggiungere documentazione API interattiva al tuo progetto.
Come gestisco l’upload di file in DMVCFramework?
Usa l’oggetto Context.Request per accedere ai file caricati. L’esempio file_upload dimostra la gestione di richieste multipart/form-data con upload di file singoli o multipli.
Posso usare DMVCFramework con FireDAC?
Sì, DMVCFramework funziona con qualsiasi layer di accesso ai dati inclusi FireDAC, ADO e altri. MVCActiveRecord usa FireDAC di default, ma puoi usare qualsiasi connessione preferisci.
Come implemento CORS in DMVCFramework?
Usa il middleware CORS integrato. Aggiungi TMVCCORSMiddleware alla configurazione del tuo server per abilitare le richieste cross-origin. Vedi l’esempio middleware_cors per le opzioni di configurazione.
Quali versioni di Delphi supporta DMVCFramework?
DMVCFramework supporta da Delphi 10 Seattle a Delphi 13 Florence, incluso il supporto completo per Linux da Delphi 10.2 Tokyo in poi.
Come gestisco errori ed eccezioni in DMVCFramework?
DMVCFramework converte automaticamente le eccezioni in risposte di errore HTTP appropriate con body JSON. Per gestione errori custom, usa raise EMVCException.Create() con codici di stato HTTP specifici, oppure implementa handler di eccezioni custom.
DMVCFramework supporta la dependency injection?
Sì, DMVCFramework ha dependency injection integrata. Usa l’attributo [MVCInject] su costruttori o parametri di metodo per iniettare automaticamente servizi e repository. Vedi l’esempio services_injection.
Gratuito. Open-source. Pronto per la produzione dal 2010.
⭐ Dai una stella su GitHub 📖 Ottieni la Guida Ufficiale
Comments
comments powered by Disqus