Net-Base Rivista

13.04.2026

Sviluppare un server REST con Delphi: architettura, sicurezza e gestione nella pratica

Sviluppare server REST con Delphi: inquadrare in modo pratico WebBroker, Horse, RAD Server e DataSnap. Inoltre: progettazione delle API, autenticazione, FireDAC-accesso ai dati, versionamento, logging, monitoraggio e deployment per Windows e Linux.

13.04.2026

Dal tema della rivista alla pratica di progetto

Pagine di servizi e tecniche correlate all'articolo

Video-Botschaft

Sviluppare un server REST con Delphi: architettura, sicurezza e gestione nella pratica

Kurz erklärt, warum bei Delphi-REST-Servern nicht der erste funktionierende Endpunkt zählt, sondern Architektur, Security und Betrieb: konsistente Fehler, Authentifizierung, Logging/Monitoring und sauberes Deployment für Windows und Linux.

Video mit KI erstellt

Transkript anzeigen

Hallo, ich bin Mark. Der erste funktionierende REST-Endpunkt ist oft der Anfang der Probleme, nicht das Ende.

Im Beitrag „REST-Server mit Delphi entwickeln: Architektur, Sicherheit und Betrieb in der Praxis“ geht es genau darum. In Unternehmen scheitern APIs selten an Delphi oder am Framework.

Sie scheitern an Betrieb: uneinheitliche Fehler, fehlende Zeitlimits, unklare Zuständigkeiten. Und an Sicherheit: Authentifizierung, also wer sich ausweist, und Autorisierung, also was jemand darf.

Wichtig ist eine klare Trennung: vorne HTTP und Validierung, in der Mitte die Fachlogik, hinten Datenzugriff. Dazu gehören Logging und Monitoring, damit Sie Störungen nachvollziehen, bevor Nutzer Tickets schreiben.

Wenn Sie dazu Fragen haben, klären wir gern die typischen Stolperstellen aus der Praxis.

Chi intende sviluppare un server REST con Delphi raramente persegue un fine autoreferenziale nelle aziende. Spesso si tratta di interfacce solide tra sistemi esistenti, portali, servizi e database – con requisiti chiari per esercizio, sicurezza e manutenibilità. Non è decisivo quanto velocemente risponde un primo endpoint, ma se il servizio rimane stabile nella pratica quotidiana: errori tracciabili, accessi ai dati controllati, autenticazione pulita, responsabilità architetturali definite e un deployment che si integri con ambienti Windows e Linux.

Delphi è per molte organizzazioni una scelta pragmatica: la logica di business esistente può essere riutilizzata, le prestazioni sono di norma sufficienti e ci sono diversi modi per realizzare API basate su HTTP. Nella pratica le opzioni si differenziano meno in «può fare REST» e più in termini di trasparenza e operatività: quanto coerentemente si possono implementare logging, timeout, regole di reverse proxy, versioning, documentazione OpenAPI e meccanismi di sicurezza?

Questo contributo classifica gli approcci principali con Delphi e indica cosa dovrebbero valutare IT-Management, amministratori e responsabili tecnici del progetto: dal design dell’API alla security e all’accesso ai dati con sostituzione del BDE con integrazione nativa, fino all’osservabilità (log, metriche, tracing) e al deployment come servizi Windows o servizi Windows e Linux. L’obiettivo è una base robusta per integrazioni con ERP, DMS, CRM o portali clienti – senza porre al centro gli internals di un framework.

Quando un server REST con Delphi conviene particolarmente

Un backend Delphi-REST ha senso soprattutto quando Delphi è già radicato in azienda o quando si vuole riutilizzare la logica di business e gli accessi ai dati delle applicazioni esistenti. Situazioni B2B tipiche:

  • Rendere un software esistente API-capable: un’applicazione VCL o un nucleo client-server ottiene uno strato REST per consentire a portali, sistemi esterni o servizi interni di accedere in modo standardizzato.
  • Integrazione e disaccoppiamento: più consumer (desktop, portale web, batch, partner) devono usare gli stessi processi di business senza accessi diretti al database o interscambi basati su file.
  • Modernizzazione a tappe: prima introdurre un’API stabile, poi rinnovare UI, moduli o database passo dopo passo. L’API diventa un confine controllato e riduce effetti collaterali.
  • Esercizio e sicurezza: le API HTTP sono facilmente gestibili dietro reverse proxy, si autenticano centralmente e si integrano in stack di monitoring.

Importante è la correttezza delle aspettative: REST è un’interfaccia di integrazione, non un surrogato della coerenza di dominio. Chi parte senza modello di dominio chiaro, confini transazionali definiti o responsabilità dati individuate costruisce rapidamente un’API raggiungibile ma costosa da mantenere e supportare nel tempo.

REST-Server con Delphi: panoramica delle opzioni

Delphi offre diverse vie per realizzare un servizio REST. Per i decisori non è tanto «qual è la più moderna», quanto: quanto si adatta alla struttura del team, al modello operativo, alla durata prevista e ai requisiti di compliance?

Delphi WebBroker: snello, trasparente, ben controllabile

WebBroker è un framework consolidato per applicazioni HTTP in Delphi. È vicino al protocollo (request/response), dunque facilmente comprensibile e interessante per molti scenari B2B in cui importano gestione degli errori controllata, header handling pulito e uno stack contenuto. WebBroker si presta tipicamente a essere eseguito dietro un reverse proxy che termina TLS e applica regole di sicurezza centralizzate.

Conseguenza pratica: molte funzionalità comode (convenzioni di routing, catene di middleware, gestione di OpenAPI) vanno aggiunte in modo strutturato. Non è uno svantaggio se gli standard architetturali sono già prioritari.

Delphi Horse: routing e middleware per standard API chiari

Delphi Horse è leggero e si basa su un routing comprensibile e sul principio del middleware. Per middleware si intendono qui: passaggi di elaborazione riutilizzabili “attorno” all’endpoint, ad esempio autenticazione, logging, rate limit o validazione della request. Per molti team è un approccio produttivo perché consente di imporre standard in modo centralizzato.

Per l’esercizio è importante: definire presto un formato di errore uniforme, timeout, dimensioni massime delle request e uno standard di logging. Senza queste direttive il sistema resta funzionante ma diventa oneroso in termini di supporto ed estendibilità.

RAD Server: approccio piattaforma con componenti integrate

RAD Server (ex EMS) segue un approccio di tipo piattaforma con funzioni integrate come gestione utenti e altri componenti. Può essere adatto quando più client condividono un backend e si vogliono sfruttare le feature di piattaforma. Per API di integrazione pure non è automaticamente la scelta migliore; qui spesso contano trasparenza, dipendenze ridotte e un modello operativo snello.

DataSnap: valutare realisticamente installazioni esistenti

DataSnap è storicamente presente in molti ambienti Delphi e può esporre endpoint di tipo HTTP/REST. Per nuovi progetti va però verificato se si adatta allo stile API pianificato, all’autenticazione (es. JWT), a OpenAPI/Swagger e ai requisiti operativi moderni. Spesso la via pragmatica è: riutilizzare la logica esistente ma porre all’esterno uno strato REST chiaramente definito che imponga standard per security, logging e versioning.

Architettura che regge in esercizio e manutenzione

Un errore comune nei progetti REST è l’approccio “handler fa tutto”: si leggono parametri HTTP, si costruisce SQL direttamente, si implementano regole di business e nel frattempo si aggiunge logging. All’inizio sembra rapido, ma porta a codice difficile da testare e a cambiamenti instabili.

Nelle realtà aziendali funziona meglio una chiara separazione dei livelli. Una struttura pragmatica e diffusa è l’architettura a tre livelli (Layer-3), che separa le responsabilità:

Livello di trasporto: HTTP, auth, validazione, formato di risposta

Qui arriva la request, si eseguono validazioni di base e si produce un formato di risposta coerente. In questo livello ricadono anche autenticazione e autorizzazione (chi può fare cosa) e regole tecniche come limiti di request, CORS o l’assegnazione di Correlation-ID (ID unici per richiesta per il tracciamento).

Livello di dominio: use case di business invece di logica d’endpoint

La domain layer incapsula i flussi di business come “creare un ordine”, “cambiare stato” o “collegare un documento”. È fondamentale che questa logica sia il più possibile indipendente dal framework HTTP. Così la stessa domain layer può essere riutilizzata da un servizio Windows o Linux, da un daemon Linux o da un processo batch, senza duplicare la logica.

Persistenza e integrazione: FireDAC, database, ERP/DMS/SMTP

Questo livello aggrega l’accesso a database e sistemi esterni. Per Delphi il normale stack di accesso ai dati è BDE-Ablosung mit nativer Anbindung, usato per collegare PostgreSQL, SQL Server, MariaDB/MySQL o Firebird in modo pulito. Non basta “usare FireDAC”: servono regole vincolanti su gestione delle connection, confini transazionali, timeout, binding dei parametri, traduzione degli errori tecnici in codici API e strategie di retry uniformi dove hanno senso a livello funzionale.

API-Design: stabile per anni, non solo fino al go-live

In contesti B2B un’API è un’interfaccia mantenuta a lungo. Il concetto chiave è la compatibilità: i consumer si basano su campi, codici di stato e semantica. Più chiare sono queste regole, meno lavoro si genera in integrazione, supporto e rilascio.

Risorse e percorsi: coerenza prima della creatività

API stabili sono tipicamente orientate alle risorse: “/customers”, “/orders/123”, “/orders/123/items”. Azioni di processo si possono modellare come sotto-risorse o endpoint di azione giustificati, ad esempio “/orders/123/cancel”, quando un puro modello CRUD non è adeguato. Fondamentale è una convenzione uniforme, documentata e condivisa dal team.

Metodi HTTP e status code: segnali chiari per i consumer

Un’API facilmente integrabile usa una semantica HTTP prevedibile: GET per letture, POST per creazione, PUT/PATCH per modifiche, DELETE per cancellazioni. Ugualmente importante è un comportamento di errore coerente. Per l’esercizio è utile un oggetto di errore standard con:

  • HTTP-Status (es. 400, 401, 403, 404, 409, 422, 500)
  • codice errore stabile (leggibile dalla macchina, documentato)
  • Correlation-ID (per veloce correlazione nei log)
  • detagli opzionali (es. errori di campo nella validazione)

Un errore ricorrente sono risposte “200 OK” con testo di errore nel body. Questo complica le integrazioni e genera logica client incline agli errori.

Versioning e estensioni compatibili

La versioning è un problema di processo e comunicazione, non solo tecnicismo. Approcci comuni sono versioning nell’URL (es. “/api/v1”) o tramite header. Nella pratica aziendale il principio più importante è: estendere in modo compatibile. Aggiungere campi è generalmente innocuo. Rimuovere o ridefinire campi richiede una nuova versione e una finestra di migrazione chiaramente comunicata. Questo riduce interruzioni nelle integrazioni e rende i rilasci pianificabili.

Sicurezza: autenticazione, autorizzazione, superfici d’attacco

Un servizio REST è un potenziale punto d’ingresso. Molti problemi di sicurezza non derivano dalla mancanza di cifratura, ma da dettagli: permessi troppo ampi, tempi di vita dei token eccessivi, endpoint admin non protetti, regole CORS non controllate o log contenenti dati sensibili.

TLS e Reverse Proxy: responsabilità chiare in rete

Nei setup tipici TLS termina al reverse proxy (es. Nginx, Apache o Microsoft IIS come reverse proxy). Il servizio Delphi gira internamente su HTTP ed è raggiungibile solo dalla rete interna. Importante è definire regole coerenti per “X-Forwarded-For” e “X-Forwarded-Proto” affinché IP client e protocollo siano interpretati correttamente. Queste informazioni sono rilevanti per audit, rate limiting e diagnostica.

JWT, API-Keys e SSO: cosa funziona in pratica

Per integrazioni system-to-system sono diffuse le API-Keys o meccanismi client-credentials. Per accessi utente in contesti aziendali i JWT (JSON Web Token) in combinazione con un Identity Provider centrale (es. OIDC) sono spesso pratici. In ambienti SSO può essere rilevante anche SAML 2.0 (standard per single sign-on, tipicamente tra portale/gateway e Identity Provider).

Indipendentemente dalla tecnologia, è necessario definire:

  • rotazione di chiavi e certificati (come vengono rinnovate le firme?)
  • ruoli/scopi (quali permessi valgono per quali endpoint?)
  • multitenancy (come si impone correttamente l’associazione tenant?)
  • audit-logging (chi ha eseguito quale azione di business e quando?)

Validazione input, CORS e Rate Limiting

La validazione degli input dovrebbe essere multilivello: sintattica (tipi, struttura JSON), semantica (range di valori, transizioni di stato) e relativa alla sicurezza (nomi file, percorsi, header). Per client browser diventa importante CORS (quali origin e header sono permessi). CORS va configurato in modo restrittivo. Il Rate Limiting protegge da abuso e picchi di carico; spesso si implementa al reverse proxy e si affianca a limiti server-side (dimensione massima del body, timeout, parallelismo limitato).

FireDAC e accesso al database: la stabilità nasce dalle regole

Nei backend REST l’accesso al database è spesso il fattore dominante di latenza e stabilità. FireDAC offre gli strumenti tecnici, ma la sicurezza operativa deriva da paletti ben definiti.

Gestione delle connection e concorrenza

Un errore classico è una connessione al database condivisa globalmente e usata in parallelo da più request. In un server REST con elaborazione parallela (thread/worker) bisogna sapere quali oggetti sono thread-safe e quali no. In pratica significa: gestire connessioni e oggetti query per request o per unit-of-work, oppure usare pooling controllato a seconda del modello server. Questo riduce deadlock, errori sporadici e problemi difficili da riprodurre.

Transazioni guidate dai casi d’uso

Le transazioni appartengono al dominio: è il caso d’uso che decide cosa deve essere atomico. Spesso “una request = una transazione” è sensato, ma non sempre. Gli endpoint read-only spesso non richiedono una transazione esplicita, mentre i flussi scriventi che toccano più tabelle devono garantire coerenza. Per integrazioni esterne (ERP, DMS, webhook) le transazioni distribuite sono in genere irrealistiche; qui aiutano sequenze chiare e logica di compensazione (come viene ripulito un successo parziale?).

Timeout, backpressure e fallimento controllato

Senza timeout le richieste, i thread e le connection DB si accumulano. Impostate timeout sia a livello HTTP sia DB. In aggiunta il backpressure è fondamentale: limitate parallelismo e lunghezza delle code in modo che il sistema risponda sotto carico con 503 (Service Unavailable) controllati, anziché crollare per esaurimento risorse. In esercizio è preferibile un fallimento rapido e chiaro rispetto a blocchi di minuti.

Payload, DTO e compatibilità a lungo termine

JSON è lo standard, ma l’interoperabilità si decide nei dettagli: formato data/ora, fusi orari, valori null, rappresentazione dei decimali, nomi dei campi e encoding. Stabilite uno standard (es. ISO-8601 in UTC) e applicatelo coerentemente.

DTO invece di esporre strutture di database

I DTO (Data Transfer Objects) sono i modelli di dati dell’API ottimizzati per lo scambio. Non dovrebbero riflettere semplicemente le tabelle del database. Così si evita che modifiche interne allo schema causino immediatamente rotture dell’API. Inoltre si può controllare quali campi interni non devono uscire (es. flag, colonne di audit) e permettere refactor interni senza mettere a rischio le integrazioni.

Idempotenza e retry

In reti aziendali timeout e retry sono normali. Definite quali operazioni sono idempotenti (esecuzioni multiple portano allo stesso risultato) e come evitare POST doppi, ad esempio con un Idempotency-Key per specifiche operazioni di scrittura. Questo riduce duplicati, stati incoerenti e casi di supporto.

Documentazione e test: OpenAPI come base di lavoro condivisa

Un’API in ambito B2B raramente viene usata da un solo team. OpenAPI (Swagger) è una lingua comune praticabile perché le specifiche possono essere automatizzate: generazione client, mocking, contract test e diff tra versioni. Anche se lo stack Delphi non genera tutto automaticamente, vale la pena mantenere una specifica curata come artefatto centrale.

Copertura di test pragmatica che riduce i costi operativi

Una struttura di test efficace per servizi REST comprende tipicamente tre livelli:

  • Unit test per la logica di dominio (senza HTTP, senza DB)
  • Integration test per accesso ai dati e comportamento transazionale (con database di test e seed riproducibili)
  • API/Contract test contro un servizio in esecuzione (status code, auth, formati di errore, versioning)

Per amministratori e team di esercizio conta soprattutto che i test siano riproducibili e non dipendano dalle ambientazioni degli sviluppatori. Quanto più l’ambiente di test somiglia al deployment reale, tanto minori saranno le sorprese dopo aggiornamenti.

Deployment e esercizio: servizio Windows, servizio Linux, container

Un server REST si può considerare «completo» solo quando è gestibile stabilmente: comportamento di start/stop, rotazione dei log, aggiornamenti, permessi, aperture di porta, certificati, monitoring e possibilità di rollback chiare.

Servizi Windows e Linux: modelli operativi consolidati

Sotto Windows è spesso naturale eseguire come servizio Windows, poiché esistono meccanismi per tipo di avvio, recovery, permessi e monitoring. Su Linux è comune usare un servizio systemd (systemd è il service manager di riferimento) che controlla policy di restart, integrazione con logging e ordine di avvio. Per entrambi i mondi: un reverse proxy davanti semplifica TLS, header policy, rate limiting e routing.

Container: riproducibili, ma solo con separazione di stato pulita

I container possono uniformare i deployment e accelerare i rollouts. Condizione necessaria è la separazione netta dello stato: database esterno, file in volumi, secrets gestiti tramite secret-management. Senza questa disciplina nascono stati misti difficili da gestire, che emergono in incidenti o scenari di restore.

Configurazione: tracciabile, separata per ambiente, senza secret nel repo

Un modello di configurazione coerente aiuta: impostazioni separate per Dev/Test/Prod, definizione centrale di log-level, dati di connessione DB, timeout, origin permessi e chiavi dei token. Informazioni sensibili non devono stare nel repository del codice sorgente. Per audit e esercizio è importante che le modifiche di configurazione siano tracciabili e possano essere propagate in modo controllato.

Observability: log, metriche e tracing come prerequisito operativo

Quando le integrazioni rallentano, l’esercizio ha bisogno di risposte: quali endpoint sono colpiti, da quando, con quale tasso di errore e quale dipendenza è lenta? Senza observability ogni incidente diventa un’indagine manuale.

Logging strutturato e Correlation-ID

Il logging strutturato (Key/Value o JSON) abilita analisi tramite tool e facilita il filtraggio per endpoint, tenant, codice errore o Correlation-ID. Ogni richiesta dovrebbe ricevere una Correlation-ID che venga anche restituita nell’header della response. Dati sensibili come password, token o contenuti personali non devono essere loggati; qui aiutano masking, hashing o log di debug mirati in ambienti isolati.

Metrica per capacità e stabilità

Metrica pratiche includono request-rate, latenze (es. p95/p99), tassi di errore per endpoint, tempi DB, numero di worker/thread attivi, utilizzo delle connection e lunghezze delle code. Questi valori sono la base per la pianificazione della capacità e aiutano a identificare problemi lenti (indici mancanti, nuove dipendenze, percorsi di query sfavorevoli).

Percorso di modernizzazione: REST come confine stabile per sistemi Delphi cresciuti nel tempo

In molte landscape Delphi l’API REST non è lo stato finale, ma un elemento di stabilità e modernizzazione. Un approccio consolidato e a basso rischio è graduale:

  1. Prioritizzare i use-case: quali funzioni devono essere rese disponibili esternamente (dati master, transizioni di stato, accesso a documenti, approvazioni)?
  2. Definire standard API: auth, formato errori, versioning, logging, timeout, rate limit, OpenAPI.
  3. Estrarre la domain: strutturare la logica di business in modo che non sia vincolata a UI o singoli endpoint.
  4. Consolidare l’accesso ai dati: regole FireDAC, concetto transazionale, baseline di performance, policy di query.
  5. Migrare i consumer per gradi: desktop, portali e altri servizi consumano l’API; gli accessi diretti al DB vengono ridotti.

Il risultato è un sistema che può evolvere a tappe: i moduli possono essere rinnovati senza che le modifiche si propaghino in modo incontrollato a tutti i client.

Ostacoli tipici nei progetti B2B-REST

Alcuni pattern d’errore ricorrono e sono facilmente evitabili con regole chiare:

  • Formati di errore incoerenti: supporto e integrazione diventano inutilmente difficili. Soluzione: oggetto di errore standard con codici stabili.
  • Sicurezza come ritocco finale: ruoli, multitenancy e audit vengono aggiunti “dopo”. Soluzione: pianificare come struttura di base, non improvvisare per endpoint.
  • Nessun limite: assenza di limiti sul body, timeout e parallelismo porta a malfunzionamenti sotto carico. Soluzione: reverse proxy più backpressure server-side.
  • Database troppo legato all’API: ogni modifica di schema rompe i consumer. Soluzione: DTO e use-case chiaramente definiti.
  • Poca osservabilità: i problemi non sono misurabili. Soluzione: Correlation-ID, log strutturati, metriche chiave.

Conclusione: REST con Delphi significa responsabilità per interfaccia ed esercizio

Sviluppare un server REST con Delphi ha successo a lungo termine nelle aziende quando architettura ed esercizio vengono pianificati insieme fin dall’inizio. La scelta del framework (WebBroker, Horse, RAD Server o un percorso di migrazione da DataSnap) è rilevante, ma non il fattore decisivo. La differenza la fanno standard chiari per API-Design, autenticazione, gestione degli errori, versioning, accesso dati FireDAC, timeout, oltre a osservabilità e deployment come servizio Windows o Linux. Così un’interfaccia diventa un mattone di integrazione stabile che abilita la modernizzazione invece di ostacolarla.

Nel contesto tecnico giocano inoltre un ruolo significativo la Delphi REST-API e la Delphi REST-API e REST-Server, quando integrazioni, flussi di dati e evoluzione devono funzionare in modo coerente.

Discutere progetto o iniziativa di modernizzazione con Net-Base.

Passo successivo

Quando un tema diventa un progetto reale, architettura, sistemi esistenti e gestione operativa dovrebbero essere considerati insieme fin dall'inizio.

Non forniamo solo supporto per questioni isolate, ma anche quando da frammenti di codice sorgente, tematiche legacy o idee di portale deve nascere un progetto aziendale solido.

  • Stato attuale, stato obiettivo e rischi tecnici vengono valutati insieme.
  • REST, l'accesso ai dati, i portali e il rollout non vengono rimandati a fasi successive.
  • Vede in anticipo quale percorso è economicamente ed operativamente sostenibile.

Condividi il post

Condividi direttamente questo articolo

LinkedIn, X, XING, Facebook, WhatsApp e e-mail sono immediatamente disponibili. Per Instagram prepariamo direttamente il link e un breve testo.

E-mail

Instagram si apre in una nuova scheda. Il link e il breve testo vengono copiati prima negli appunti.