WiRL 和 WebBroker

发布: (2025年12月17日 GMT+8 16:33)
3 min read
原文: Dev.to

Source: Dev.to

WiRL e WebBroker 的封面图片

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),并实例化 TWiRLServerTWiRLDispatcher

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 应用中集成 REST 服务,或有特定需求使用 WebBroker 支持的架构(Apache 模块、ISAPI、CGI 或 FastCGI),否则更倾向于使用基于 Indy 的传统架构。使用 Indy 的方式更易于配置和管理,并且能够完整支持 WiRL 的所有功能。

Back to Blog

相关文章

阅读更多 »