Repository navigation
validacao
Home > Objetos no corpo > Validação 🚧
Important
Em desenvolvimento (2.0). Ainda não está numa versão lançada e pode mudar.
Vale para a 2.0 · Delphi XE em diante e Lazarus/FPC 3.2 em diante · Nível: básico
Em uma frase: regras na rota (ou atributos na classe) conferem o objeto lido do corpo; se alguma falha, o cliente recebe 422 com os erros por campo e o handler nem roda.
Você vai precisar: o pacote RALModuleObjectsPackage e uma rota de objeto.
No Object Inspector, ValidationRules da rota; em código:
Rota := Server.CreateObjectRoute('clientes', 'TCliente', Salvar);
Rota.ValidationRules.AddRule('Nome', vrRequired);
Rota.ValidationRules.AddRule('Nome', vrMaxLength, '60');
Rota.ValidationRules.AddRule('Email', vrEmail);
Rota.ValidationRules.AddRule('Idade', vrMin, '18');
Rota.ValidationRules.AddRule('Estado', vrIn, 'SP,RJ,MG');
Rota.ValidationRules.AddRule('Cpf', vrCustom, 'cpf', 'CPF inválido');| regra | Value |
|---|---|
vrRequired |
— (texto não vazio, objeto não nil, lista não vazia) |
vrMinLength, vrMaxLength
|
número de caracteres |
vrMin, vrMax
|
número (. decimal) |
vrPattern |
expressão regular (RALRegex), o texto inteiro |
vrEmail, vrUrl, vrUUID, vrDate
|
— |
vrIn |
valores separados por vírgula |
vrCustom |
um nome; quem decide é OnCustomValidation
|
Um campo vazio só é julgado por vrRequired: as outras regras valem quando há valor.
Message troca o texto padrão (que vem nos três idiomas do RAL).
vrCustom vai para o evento do TRALObjectSettings (ou
RALObjectSettings.OnCustomValidation): acrescente campo=mensagem em AErrors para
recusar.
uses RALObjectRTTI;
TCliente = class(TRALObject)
published
[Required, MaxLength(60)]
property Nome: string ...;
[JSONName('e-mail'), Email]
property Email: string ...;
[Range(18, 120)]
property Idade: Integer ...;
[Pattern('[A-Z]{3}-\d{3}')]
property Codigo: string ...;
end;Atributos e regras da rota somam-se. No FPC 3.2 não há atributos: use as regras.
{"type":"about:blank","title":"Um ou mais campos são inválidos","status":422,
"errors":{"Nome":["é obrigatório"],"e-mail":["não é um e-mail válido"]}}O campo sai com o nome do JSON (a convenção de Naming ou o [JSONName]). O status é
RALObjectSettings.ValidationStatus (422; 400 se preferir). Em código, fora de uma rota:
RALValidateObject(Obj, Regras, Erros) e RALAnswerValidation.
| sintoma | causa |
|---|---|
| regra ignorada |
Field com outro nome (vale o da propriedade ou o do JSON) |
vrMin falha com decimal |
escreva 1.5, não 1,5
|
| atributo ignorado | falta RALObjectRTTI no uses do projeto |
- Objetos no corpo
- Controllers por atributos
-
Log, erros, limites (o formato
problem+json)
Começar
Servidor
- Rotas e parâmetros
- Rotas avançadas: tipos, grupos, versões 🚧
- Ler o pedido e responder
- Objetos no corpo 🚧
- Resposta em fluxo 🚧
- Plugins 🚧
- Autenticação
- Banco de dados (DBWare)
- Servir site e arquivos
- Swagger e Postman
- Servidor SOAP 🚧
- WS-Security 🚧
- HTTPS
- Criptografia ponto a ponto
- Segurança para produção
- Colocar no ar
- Desempenho
- Testes em memória 🚧
MQTT 🚧
- O que é e quando usar 🚧
- Cliente MQTT 🚧
- Broker MQTT 🚧
- MQTT-SN 🚧
- Ponte REST 🚧
- Segurança 🚧
- Rede ruim 🚧
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