O ecossistema Horse continua se consolidando como a escolha número um para desenvolvedores Delphi e Lazarus que buscam velocidade, leveza e simplicidade na criação de APIs REST. Mas, à medida que nossas aplicações crescem, precisamos de ferramentas profissionais para lidar com segurança, arquivos e validação.
Hoje, trago para vocês um review completo de três novos middlewares essenciais que finalizei hoje, focados em deixar suas APIs Delphi/Lazarus blindadas, prontas para upload de arquivos e com validações de dados dinâmicas. Vamos conhecer cada um deles!
1. Horse Helmet: Blindagem Rápida contra Ataques Web Comuns
Colocar uma API em produção sem segurança de cabeçalhos HTTP é um risco enorme. O Horse Helmet é um interceptador de segurança inspirado no consagrado pacote Helmet do ecossistema Node.js. Com apenas uma linha de código, ele configura automaticamente cabeçalhos HTTP cruciais para proteger sua aplicação.
Ele adiciona barreiras nativas contra ataques de injeção de scripts (XSS), sequestro de conexões, Clickjacking e farejamento de tipos de mídia:
- Content-Security-Policy (CSP): Previne a injeção e execução de scripts maliciosos.
- X-Frame-Options: Evita que sua API seja renderizada dentro de frames/iframes em páginas de terceiros.
- Strict-Transport-Security (HSTS): Garante que o navegador/cliente faça requisições apenas via HTTPS.
- X-Content-Type-Options: Bloqueia tentativas de ignorar o cabeçalho Content-Type original (MIME-sniffing).
Como ativar na sua API:
uses Horse, Horse.Helmet;begin
// Ativação global com regras de segurança recomendadas
THorse.Use(Helmet); THorse.Get('/ping',
procedure(Req: THorseRequest; Res: THorseResponse)
begin
Res.Send('pong');
end);THorse.Listen(9000);
end.
2. Horse Multipart: Upload de Arquivos de Alto Desempenho e Sem Memory Leaks
Trabalhar com upload de arquivos binários (imagens, PDFs, XMLs) via multipart/form-data costumava dar trabalho em servidores Delphi. O Horse Multipart resolve isso utilizando um parser binário nativo de alto desempenho baseado em ponteiros de memória (PByte scanning).
A arquitetura dele foi desenhada com dois focos principais:
- Baixíssimo Consumo de Memória: Apenas os metadados do upload (nome do arquivo, tipo MIME) ficam em memória. O fluxo binário dos arquivos grandes é gravado diretamente em disco de forma imediata, prevenindo exaustão de recursos em uploads massivos.
- Zero Memory Leak (Limpeza Automática): Ao término da requisição HTTP, o middleware destrói automaticamente as instâncias temporárias criadas e exclui os arquivos temporários do disco, caso você não os tenha salvos/movidos explicitamente usando o método
SaveToFile.
Como utilizar:
uses System.SysUtils, Horse, Horse.Multipart;begin
THorse.Use(Multipart()); THorse.Post('/upload',
procedure(Req: THorseRequest; Res: THorseResponse)
var
LMultipart: THorseMultipart;
LFile: THorseMultipartFile;
LUsuario: string;
begin
LMultipart := Req.Body<THorseMultipart>; // Recupera campos de texto comuns do formulário LUsuario := LMultipart.GetFieldValue('usuario', 'Anônimo'); // Recupera e salva o arquivo temporário no diretório final LFile := LMultipart.GetFileByFieldName('documento'); if Assigned(LFile) then begin LFile.SaveToFile('C:\arquivos\' + LFile.FileName); Res.Send(Format('Obrigado %s! Arquivo "%s" recebido.', [LUsuario, LFile.FileName])); end else Res.Send('Nenhum arquivo enviado').Status(400); end);THorse.Listen(9000);
end.
3. Horse Schema Validation: Validação Dinâmica baseada em JSON Schema (Design-First)
Por fim, se você quer validar de forma rígida o corpo das requisições JSON da sua API sem precisar reescrever validações complexas no código, o Horse Schema Validation é a ferramenta certa. Ele permite validar os dados de entrada de forma recursiva baseando-se na especificação internacional JSON Schema.
Ele funciona como um interceptador de barreira. Se o JSON enviado pelo cliente não obedecer exatamente às regras definidas no esquema, o middleware aborta a requisição retornando status 400 Bad Request com a lista estruturada das violações, impedindo que o fluxo chegue até seu controller.
Por que a abordagem “Schema-First” é fantástica?
- Validação Unificada (DRY): O mesmo arquivo JSON Schema que valida o formulário no Frontend (React, Angular, Vue, Flutter) é consumido e validado no Backend pelo Horse.
- Mudanças Sem Recompilação: Você pode ajustar limites, padrões regex ou regras de campos obrigatórios modificando apenas o JSON do schema (ou o arquivo externo). Não há necessidade de gerar novos builds ou novos deploys da aplicação.
- Portabilidade Absoluta: A validação foi codificada do zero sem qualquer dependência externa de DLLs ou bibliotecas proprietárias, funcionando perfeitamente em Delphi e Lazarus (Windows, Linux, macOS).
Exemplo prático de validação:
const USER_SCHEMA = '{' + ' "type": "object",' + ' "properties": {' + ' "nome": { "type": "string", "minLength": 3 },' + ' "email": { "type": "string", "format": "email" }' + ' },' + ' "required": ["nome", "email"]' + '}';begin
// O middleware intercepta a rota e faz a validação automática
THorse.Use('/cadastro', SchemaValidation(USER_SCHEMA));THorse.Post('/cadastro',
procedure(Req: THorseRequest; Res: THorseResponse)
begin
Res.Send('Cadastro recebido e 100% validado!');
end);
end.
Conclusão
Esses três novos middlewares elevam o patamar de profissionalismo de qualquer API escrita em Delphi ou Lazarus:
- O Horse Helmet cuida da segurança nas bordas.
- O Horse Multipart gerencia a entrada de arquivos de forma robusta e otimizada.
- O Horse Schema Validation garante a integridade semântica dos dados de forma dinâmica e reutilizável.
Todos os pacotes são open-source, multiplataforma e estão prontos para serem instalados no seu projeto usando o gerenciador Boss.
Dúvidas ou sugestões? Deixe seu feedback nos comentários!
Descubra mais sobre Régys Borges da Silveira
Assine para receber nossas notícias mais recentes por e-mail.
Dê-nos sua opinião, seu comentário ajuda o site a crescer e melhorar a qualidade dos artigos.