WiRL 和 WebBroker
Source: Dev.to

WebBroker简介
WebBroker 可能是 Embarcadero(当时仍为 Borland)开发的第一项技术,旨在将 Web 编程与 Delphi 集成。该系统基于组件 TWebModule(一种特殊的 DataModule),能够分发各个调用。它可以通过两种方式工作:
- WebAction – 双击 WebModule 会打开一个弹出窗口,您可以在其中创建一个或多个 WebAction;对每个 WebAction 可以定义匹配 HTTP 请求的条件(方法、URL 等),并在事件中定义响应。
- Dispatcher – 另一种方式是编写实现
IWebDispatch接口的类,并在 WebModule 上注册它。
WiRL 与 WebBroker
WiRL 使用这种最新的方法。 在最新版本中,引入了一个新组件 TWiRLDispatcher,它可以将所有对 WebBroker 的调用转发到 WiRL。
调度器会检查是否存在为处理该特定请求而配置的 WiRL engine。如果存在,它会请求该 engine 处理响应;否则会通知 WebBroker 无法生成响应。在这种情况下,WebBroker 将尝试使用其他已配置的调度器或 WebAction。
从代码角度来看,需要创建一个普通的 WebBroker 应用程序(例如使用向导:File → New → Others → Web → Web Server Application),并实例化 TWiRLServer 和 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;
WebBroker 与 WiRL 的优缺点
优点
- 能够在已有的 WebBroker 应用中集成 REST 服务。
- 生成与 WebBroker 支持的架构集成的应用:Apache 模块、ISAPI、CGI、FastCGI(Delphi 13 引入)、Standalone。
- 使用 WebBroker 的特定功能:原生日志记录和会话。
缺点
- 使用 WebBroker 引入的复杂性增加。
- 缺少某些功能,如 SSE (Server‑Sent Events) 和 chunked transfer encoding。
个人建议: 对于新项目,除非需要在已有的 WebBroker 应用中集成 REST 服务,或有特定需求使用 WebBroker 支持的架构(Apache 模块、ISAPI、CGI 或 FastCGI),否则更倾向于使用基于 Indy 的传统架构。使用 Indy 的方式更易于配置和管理,并且能够完整支持 WiRL 的所有功能。