Repository navigation
criar plugin
mobius1qwe edited this page Oct 7, 2026
·
1 revision
Home > Criar um plugin
Important
Em desenvolvimento (1.3). Ainda não está numa versão lançada e pode mudar.
Nível: avançado
Em uma frase: um plugin é uma classe que herda TRALPlugin e diz em que momento
do pedido quer agir; o servidor chama só aquele momento.
Você vai precisar: entender Plugins. Para um grupo de rotas, o caminho é outro: Criar um módulo.
| Fase | Método que você sobrescreve | Quando roda | Para quê |
|---|---|---|---|
ppValidate |
ValidateRequest |
antes de o corpo ser lido | recusar cedo: responder 400 ou mais encerra o pedido |
ppProcess |
ProcessRequest(..., var AHandled) |
antes das rotas | mexer no pedido/resposta; AHandled := True responde ali mesmo |
ppResolveRoute |
ResolveRoute |
ao procurar a rota | oferecer uma rota própria (como a /gettoken do JWT) |
ppAuthenticate |
Authenticate |
ao autenticar | ser um tipo de login |
ppAuthResult |
AfterAuthenticate, AuthAttempt
|
depois do veredito do login | reagir ao resultado (é onde a força bruta conta) |
Além disso: ServerActivating e ServerDeactivating, quando o servidor liga e
desliga.
A ordem entre plugins é a Priority, maior primeiro. Os do RAL vão de 950
(cabeçalhos de segurança) a 50 (fila); um plugin novo nasce com 100. As constantes
estão em RALPlugin (RALPriorityCORS, RALPriorityAuthentication...).
unit PluginChaveAPI;
interface
uses
Classes, SysUtils,
RALPlugin, RALRequest, RALResponse, RALTypes, RALConsts;
type
TPluginChaveAPI = class(TRALPlugin)
private
FChave: StringRAL;
protected
function Phases: TRALPluginPhases; override;
public
procedure ValidateRequest(ARequest: TRALRequest; AResponse: TRALResponse); override;
published
property Chave: StringRAL read FChave write FChave;
end;
implementation
function TPluginChaveAPI.Phases: TRALPluginPhases;
begin
Result := [ppValidate]; // só este momento é chamado
end;
procedure TPluginChaveAPI.ValidateRequest(ARequest: TRALRequest; AResponse: TRALResponse);
begin
if ARequest.GetHeader('X-Api-Key') <> FChave then
AResponse.Answer(HTTP_Unauthorized, '{"erro":"chave inválida"}');
// status >= 400: o pedido para aqui, a rota não roda
end;
end.Usar:
vChave := TPluginChaveAPI.Create(Self);
vChave.Chave := 'abc123';
vChave.Server := Servidor;procedure Register;
begin
RegisterComponents('RAL - Plugins', [TPluginChaveAPI]);
end;-
Só as fases de
Phasessão chamadas. Uma fase que nenhum plugin usa não custa nada. Se as fases dependem de uma propriedade, chameChangedquando ela mudar. - Vários pedidos ao mesmo tempo. O mesmo objeto atende todas as threads: estado compartilhado (listas, contadores) precisa de trava.
-
ServerDeactivatingroda com pedidos ainda em andamento: não libere o que uma rota pode estar usando. -
Exceção em
ServerActivatingimpede o servidor de ligar. -
Enabled := Falsetira o plugin do caminho sem desligá-lo do servidor.
Começar
Servidor
- Rotas e parâmetros
- Ler o pedido e responder
- Plugins 🚧
- Autenticação
- Banco de dados (DBWare)
- Servir site e arquivos
- Swagger e Postman
- HTTPS
- Criptografia ponto a ponto
- Segurança para produção
- Colocar no ar
- Desempenho
Cliente
Motores
Avançado
Ajuda
- Problemas comuns
- Atualizar o Indy
- Várias versões do Delphi
- Vídeos e guias
- Módulos de terceiros
- Licenças
- Contribuir
- Roadmap e changelog
🚧 = em desenvolvimento, pode mudar