WiRL e WebBroker
Source: Dev.to

Introduzione a WebBroker
WebBroker è probabilmente la prima tecnologia sviluppata da Embarcadero (all’epoca ancora Borland) che ha cercato di integrare la programmazione Web con Delphi. Il sistema si basa sul componente TWebModule (un particolare tipo di DataModule) che è in grado di smistare le singole chiamate. Per fare questa operazione può agire in due modi:
- WebAction – facendo doppio click sul WebModule viene aperta una finestra popup dove è possibile creare una o più WebAction; per ognuna di esse è possibile definire dei criteri per fare match con la richiesta HTTP (metodo, URL, ecc.) e gestire un evento dove definire la risposta.
- Dispatcher – in alternativa è possibile scrivere una classe che implementi l’interfaccia
IWebDispatche registrarla sul WebModule.
WiRL e WebBroker
WiRL usa quest’ultimo approccio. Con l’ultima versione è stato introdotto un nuovo componente TWiRLDispatcher che permette di inoltrare tutte le chiamate fatte a WebBroker verso WiRL.
Il dispatcher verifica se esiste un engine di WiRL configurato per gestire quella specifica richiesta. In caso positivo, chiede all’engine di gestire la risposta; altrimenti notifica a WebBroker l’impossibilità di produrla. In quest’ultimo caso WebBroker proverà con altri dispatcher o WebAction configurati.
Dal punto di vista del codice, è necessario creare una normale applicazione WebBroker (ad esempio usando il wizard: File → New → Others → Web → Web Server Application) e istanziare TWiRLServer e TWiRLDispatcher.
interface
uses
// .............
WiRL.http.Server,
WiRL.http.Server.WebBroker;
type
TMainWebModule = class(TWebModule)
private
FWiRLServer: TWiRLServer;
FDispatcher: TWiRLDispatcher;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
end;
var
WebModuleClass: TComponentClass = TMainWebModule;
implementation
{$R *.dfm}
constructor TMainWebModule.Create(AOwner: TComponent);
begin
inherited;
FWiRLServer := TWiRLServer.Create(Self);
FWiRLServer.AddEngine('/rest')
.SetEngineName('RESTEngine')
.AddApplication('/app')
.SetResources('*')
.SetFilters('*');
FWiRLServer.Active := True;
// È fondamentale che l'owner dei dispatcher sia Self, che deriva da TWebModule
// In questo modo il dispatcher viene automaticamente registrato sul WebModule
FDispatcher := TWiRLDispatcher.Create(Self);
FDispatcher.Server := FWiRLServer;
end;
Vantaggi e svantaggi di WebBroker con WiRL
Vantaggi
- Possibilità di integrare servizi REST in applicazioni WebBroker preesistenti.
- Generazione di applicazioni integrate con le architetture supportate da WebBroker: moduli Apache, ISAPI, CGI, FastCGI (introdotta da Delphi 13), Standalone.
- Utilizzo delle funzionalità specifiche di WebBroker: logging nativo e sessioni.
Svantaggi
- Aumento della complessità introdotta dall’uso di WebBroker.
- Mancanza di alcune funzionalità, come SSE (Server‑Sent Events) e chunked transfer encoding.
Consiglio personale: per i nuovi progetti WiRL è preferibile utilizzare l’architettura tradizionale basata su Indy, a meno che non sia necessario integrare servizi REST in un’applicazione WebBroker preesistente o si abbia l’esigenza specifica di sfruttare una delle architetture supportate da WebBroker (moduli Apache, ISAPI, CGI o FastCGI). L’approccio con Indy risulta più semplice da configurare e gestire, offrendo pieno supporto a tutte le funzionalità di WiRL.