Durante anos, o desenvolvimento Web no Delphi e Lazarus sempre seguiram o antigo padrão Web Broker. Felizmente, estamos vivendo uma nova fase no ambiente Object Pascal.
Photo by Maik Jonietz on Unsplash
Introdução
A tecnologia Web Broker foi apresentada no Delphi 3 em 1997 e desde esse tempo não houve muitas melhorias. Pelo menos, não na parte do arquitetura das aplicações.
O Web Broker é um sistema baseado em Web Modules. Cada Web Module pode ter uma lista de Actions, e cada Action corresponde a uma URL onde você define um evento que será executado.
Eu venho construindo aplicações Web em Object Pascal desde os tempos do Delphi 4~5. Essas aplicações sempre tiveram uma boa performance quando utilizávamos o padrão ISAPI. Entretanto, a arquitetura estava longe de ser a ideal. Na minha opinião, tentaram utilizar a abordagem RAD em um contexto não-RAD. Funcionava, e ainda funciona, mas não era “empolgante” desenvolver tais aplicações.
fpWeb Framework
A implementação atual do fpWeb — framework Web disponível no Free Pascal 3.0.4 — é bem diferente. Eles mantiveram a compatibilidade com o estilo Web Broker antigo, caso você ainda precise dele para sistemas legados, mas nos deram a possibilidade de utilizar um sistema de rotas muito melhor além de podermos compilar nossas aplicações utilizando diferentes tipos de modelos como Standalone, CGI ou FastCGI.
Rotas
Com o novo sistema de rotas não é mais necessário utilizar Web Modules e eventos, basta registrar uma classe ou mesmo uma simples procedure para representar uma ação quando uma determinada URL for acessada.
Além disso, não estamos mais presos às URLs com o padrão /module/action
utilizados no padrão Web Broker. No novo sistema, você pode definir e registrar suas URLs do jeito que quiser.
Exemplo. Através da herança, você pode definir uma classe que irá responder a uma determinada URL:
TMyHandler = Class(TRouteObject)
public
procedure HandleRequest(
ARequest: TRequest; AResponse: TResponse); override;
end;
initialization
HTTPRouter.RegisterRoute(
'/my/route/in/action', rmAll, TMyHandler
);
A classe TRouteObject
faz parte da fpWeb. Utilize essa classe como base para suas classes. É possível utilizar desde uma simples procedure ou até mesmo uma classe que implemente IRouteInterface
. Mas, na minha opinião, a melhor opção é utilizar apenas classes por ser o método mais simples e organizado para codificar as rotas.
Standalone, CGI ou FastCGI
A depuração de aplicações Web nunca foi fácil. Uma aplicação ISAPI, por exemplo, é executada no formato multi thread e depurar uma aplicação nesse formato é um desafio.
A fpWeb facilita o desenvolvimento e depuração. Através de diretivas de compilação, você pode determinar o tipo de modelo a ser desenvolvido. Por exemplo, você poderia determinar que o modelo Standalone será escolhido se o depurador estiver ativado.
Exemplo.
{$ifdef STANDALONE}
fphttpapp,
{$endif}
{$ifdef FCGI}
fpfcgi,
{$endif}
Standalone é uma aplicação que não precisa de um serviço Apache ou IIS. O próprio executável se registra numa porta (escolhida pelo desenvolvedor) para responder a requisições HTTP. É possível utilizar esse modelo até mesmo em produção — pense em vários serviços sendo executados localmente numa única máquina se comunicando entre si, mas que também podem responder a requisições na rede.
Sendo uma aplicação que não necessita de um servidor Web, é possível depurar facilmente utilizando breakpoints da mesma forma que fazemos em aplicações Desktop.
No entanto, se você tem um servidor Web, a forma mais simples de fazer o deploy para um Apache ou IIS é o formato CGI. Nesse formato o servidor Web irá executar e instanciar sua aplicação a cada requisição feita pelo usuário de forma isolada e segura. É um ótimo modelo para aplicações simples, no entanto não é o mais performático.
Finalmente, o padrão FastCGI une o que há de melhor do modelo ISAPI (multi thread, cache, inicialização rápida) com a segurança do CGI (processos isolados). Para aplicações que realmente necessitam de performance, esse deve ser o padrão a ser escolhido.
Servidores Web permitem muitas configurações para o modelo FastCGI como o número de instâncias que ficarão ativas, quando elas serão desativadas por falta de requisições, etc.
E não pense em apenas servidores Linux. Eu mesmo mantenho algumas aplicações FastCGI em servidores Windows funcionando 24h/dia, sem parar.
Conclusão
O framework fpWeb vem facilitando muito o desenvolvimento Web em aplicações Object Pascal com Free Pascal e Lazarus.
É um framework simples, bem testado e utilizado em produção a muitos anos pela comunidade.
Com o uso de diretivas de compilação fica fácil alternar entre modelos de aplicações, facilitando muito o desenvolvimento e depuração do código.
Até logo.