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. In effetti con l'ultima versione è stato introdotto un nuovo componente TWiRLDispatcher che permette di inoltrare tutte le chiamate fatte a WebBroker verso WiRL.
Il dispatcher poi verificherà se esiste un engine di WiRL configurato per gestire quella specifica richiesta. In caso positivo demanderà all'engine il compito di gestire la risposta altrimenti notificherà WebBroker di non essere in grado di produrla. In quest'ultimo caso WebBroker proverà con altri dispatcher o WebAction configurati.
Dal punto di vista del codice quello che è necessario fare è creare una normalissima applicazione WebBroker (magari usando il wizard dedicato: File → New → Others → Web → Web Server Application) ed 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<TWiRLRESTEngine>('/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
A questo punto ci si potrà chiedere quali sono i vantaggi nell'usare una soluzione basata su WebBroker piuttosto che quella classica basata sui componenti Indy.
I vantaggi principali sono i seguenti:
- Possibilità di integrare servizi REST in applicazioni WebBroker preesistenti.
- La possibilità di generare applicazioni integrate con le architetture supportate da WebBroker: Moduli Apache, ISAPI, CGI, FastCGI (introdotta da Delphi 13), Standalone.
- Usare le funzionalità specifiche di WebBroker: logging nativo e sessioni.
Gli svantaggi sono principalmente relativi ad un certo aumento di complessità che l'uso di WebBroker comporta e ad alcune funzionalità non disponibili, come ad esempio SSE (Server-Sent Events) e chunked transfer encoding.
Personalmente consiglio di utilizzare l'architettura tradizionale basata su Indy per i nuovi progetti WiRL, a meno che non si debba integrare servizi ReST in un'applicazione WebBroker preesistente o si abbia l'esigenza specifica di utilizzare una delle architetture supportate da WebBroker (come moduli Apache, ISAPI, CGI o FastCGI). L'approccio con Indy risulta infatti più semplice da configurare e gestire, ed offre il pieno supporto di tutte le funzionalità di WiRL.
Top comments (0)