Rotas no ModularBr: como definir e gerenciar suas rotas.
O ModularBr possui um recurso poderoso de gerenciamento de rotas que suporta solicitações utilizando os métodos GET, POST, PUT, DELETE e PATCH, seguindo a arquitetura REST. As rotas são adicionadas aos módulos por meio da construção da classe Route, onde são informados o método, o caminho e o manipulador da rota.
Para exemplificar o uso das rotas no ModularBr, vamos considerar o AppModule e adicionar algumas rotas a ele, e que você esteja usando um framework de requisição como o Horse:
THorse.Get('/nfe/:id',
procedure(Req: THorseRequest; Res: THorseResponse; Next: TProc)
begin
Modular.LoadRouteModule('/nfe/:id');
try
// use dos recursos do modulo NFeModule aqui...
Res.Send('ModularBr' + Modular.Get<TControllerServer>.GetNfe)
.Status(200)
.ContentType('application/json');
finally
Modular.DisposeRouteModule('/nfe/:id');
end;
end);
app.module.pas
unit app.module;
interface
uses
dmfbr.module,
nfe.module, cte.module, nfse.module, nfce.module, mdfe.module;
type
TAppModule = class(TModule)
public
function Routes: TRoutes; override;
end;
implementation
{ TAppModule }
function TAppModule.Routes: TRoutes;
begin
// Rotas
Result := [RouteModule('/nfe/:id', TNFeModule)];
end;
end.
nfe.module.pas
unit nfe.module;
interface
uses
dmfbr.module,
nfe.repository, nfe.controller, nfe.provider;
type
TNFeModule = class(TModule)
public
function Routes: TRoutes; override;
end;
implementation
{ TNFeModule }
function TNFeModule.Binds: TBinds;
begin
// Injeção de dependência
Result := [Bind<TRepositoryServer>.SingletonLazy,
Bind<TControllerServer>.Singleton,
Bind<TProviderORMBr>.Factory];
end;
function TNFeModule.Routes: TRoutes;
begin
// Exemple: [RouteModule('/nfe/pdf/:id', TPDFModulo),
// RouteModule('/nfe/xml/:id', TXMLModulo)]
Result := [];
end;
end.
Agora você pode testá-lo em seu navegador ou usando algum programa como Postman: