Валидация HTTP-форм с использованием JSON-схем#
Для того чтобы преобразовать данные, передаваемые в виде HTTP-формы с помощью JSON схемы используется действие PostFormDataToFlateJson. Действие создает JSON объект, содержащий пары ключ - строковое значение, либо если одному имени параметра соответствует несколько значений, то вида ключ - массив значений.
Предположим, существует форма, содержащая два поля Name и Age, и необходимо проверить, что оба поля приходят, и возраст есть числовое значение, состоящее не менее чем из 3 знаков и не более чем 199.
Создадим схему form.json для проверки содержимого:
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"name": {
"type": "string"
},
"age": {
"type": "string",
"pattern": "^([1-9]|[1-9][0-9]|[1][0-9][0-9])$"
}
},
"additionalProperties": false,
"required": [
"name", "age"
]
}
Скопируем схему в каталог /sowa/profile_storage/custom/chains/schemas.
Теперь опишем конфигурацию сервиса:
- id: 7
allowed_queries:
- method: post
url: /balancer
listen:
- port: 20207
modifiers:
set_output_headers:
- headers:
- REGION $clj_region
chains:
request_chains:
- actions:
- action: PostFormDataToFlateJson
actions:
- action: JsonValidation
params:
validation_schema: {type: file, path: schemas/form.json}
message: $clj_request_body
upstream_group_id: 1
upstream_groups:
- id: 1
servers:
- server: 127.0.0.1:30001
rewrite_uri:
- from: /balancer
to: /test
Остановим, сконфигурируем и перезапустим профиль.
Проверим работоспособность:
curl -v http://localhost:20207/balancer --data "name=Ivan&age=34"
Запрос проходит успешно:

Отправим некорректный запрос:
curl -v http://localhost:20207/balancer --data "name=Ivan&age=500"
