Валидация по JSON схеме#
Валидация по JSON схеме представляет собой группу, содержащую в себе request и response параметры для валидации JSON сообщений. Использование request/response валидации по JSON схеме исключает возможность дополнительного подключения wsdl/xsd валидации.
Совместное использование валидаторов и цепочек: Данный механизм предполагает монопольное право на работу с контекстом запроса или ответа. В связи с этим, одновременная работа валидаторов (validators) и цепочек (chains) запрещена на уровне конфигурации, хотя и технически возможна в случае имплементации на разных фазах.
Опциональные параметры:
validator_json
Тип параметра: группа параметров и их значения.
По умолчанию: не имеет значения по умолчанию.
Опциональные параметры:
request
В значении параметра указывается последовательность, включающая в себя следующие параметры, используемые для валидации запроса по схеме.
Тип параметра: группа параметров и их значения.
По умолчанию: не имеет значения по умолчанию.
Обязательные параметры:
schema
В значении параметра указывается путь к файлу схемы, с помощью которой происходит валидация.
Тип параметра: строковое значение.
Опциональные параметры:
default
Вкл./Откл. использование дефолтного правила, если другие правила валидации не могут быть использованы. Для дефолтного правила отсутствует возможность указания параметров url, method и params.
Дефолтное правило не может быть использовано, если на вход приходит пустое тело запроса.
Тип параметра:
true;
false.
Значение по умолчанию:
default: false
url
Параметр, позволяющий соотнести схему валидации JSON объекта и адрес, по которому был отправлен запрос. Для понимания, зачем следует вводить дополнительный url, приведем следующий пример:
validators: validator_json: request: - schema: schemes/json/ABO/Banking.Products.Brokerage.TradeHistory.Get.POST.rq.v1.0.json url: ^\/brokerage-info-ib\/rest\/v1\.0\/ib\/Banking\/Product\/Brokerage\/TradeHistory\/Get$ method: post - schema: schemes/json/ABO/Banking.Products.Brokerage.TradeHistory.Get.POST.rq.v2.0.json url: ^\/brokerage-info-ib\/rest\/v2\.0\/ib\/Banking\/Product\/Brokerage\/TradeHistory\/Get$ method: post
Имеется возможность использования регулярного выражения.
Для использования символов
\ ^ $ . | ? * + ( ) [ ] { } - в явном виде, необходимо их экранирование:
request: - schema: schemes/json/CREDIT_CAPACITY_MB/Suggestions.KLADR.post.v2.rq.json url: ^\/loan-suggestion\/services\/rest\/v2\/MYAPP\/Suggestions\.KLADR$ method: post
Используется в случае:
default is None;
default is False.
Тип параметра: строковое значение.
По умолчанию: не имеет значения по умолчанию.
method
Параметр, позволяющий соотнести схему валидации JSON объекта и метод запроса, которым он передается.
Т.е. если используется post, то схема, указанная в schema, будет применяться только для post-запросов.
validators: validator_json: request: - schema: schemes/json/ABO/Banking.Products.Brokerage.TradeHistory.Get.POST.rq.v1.0.json url: ^\/brokerage-info-ib\/rest\/v1\.0\/ib\/Banking\/Product\/Brokerage\/TradeHistory\/Get$ method: post
Используется в случае:
default is None;
default is False.
Тип параметра:
post;
put;
delete;
patch.
По умолчанию: не имеет значения по умолчанию.
params
Условие для вызова валидатора, при использовании параметров в запросе.
Используется в случае:
default is None;
default is False.
Тип параметра: последовательность параметров и их значения.
По умолчанию: не имеет значения по умолчанию.
Обязательные параметры:
name
В значении параметра указывается имя аргумента.
Тип параметра: текстовое значение.
operator
В значении параметра определяется операция для аргумента.
Тип параметра:
'=' - посимвольное равенство;
'!=' - посимвольное неравенство;
'~' - регулярное выражение с учетом регистра;
'~*' - регулярное выражение без учета регистра;
'!~' - негативное регулярное выражение с учетом регистра;
'!~*' - негативное регулярное выражение без учета регистра.
pattern
В значении параметра определяется паттерн, применяемый к аргументу.
Имеется возможность использования регулярного выражения.
Для использования символов
\ ^ $ . | ? * + ( ) [ ] { } - в явном виде, необходимо их экранирование.
Символ \ экранируется только тогда, когда находится в кавычках.
В примере ниже показывается, что экранируется связка \ с иным элементом (например #):
- name: "name_1" pattern: "[^\\#\\$\\%\\&\\(\\)\\*\\+\\,\\-\\.\\:\\;\\<\\=\\>\\?\\^\\_\\{\\|\\}\\~\\@]+" - name: "name_2" pattern: "[^ЁёА-я]+"
Тип параметра: текстовое значение.
Пример:
validators: validator_json: request: - schema: schemes/json/CWP/Banking.Products.Insurance.Application.Init.post.rq.v1.0.json method: post url: ^\/insurance\/v1\.0\/mobile\/application\/init$ params: - name: "cmd" operator: "=" pattern: "START"
allow_empty_body
В значении параметра указывается, нужно ли разрешать пустые тела или нет.
Тип параметра: логическое значение:
true;
false.
По умолчанию: не имеет значения по умолчанию.
transforms
В значении параметра определяется необходимость выполнения преобразований над телом запроса/ответа и последующая валидация результата.
На данный момент доступен единственный вариант - formdata to json.
Тип параметра: последовательность строковых значений.
PostFormDataToFlateJson.
По умолчанию:
transforms: - PostFormDataToFlateJson
response
В значении параметра указывается последовательность, включающая в себя следующие параметры, используемые для валидации ответа по схеме:
Тип параметра: группа параметров и их значения.
По умолчанию: не имеет значения по умолчанию.
Обязательные параметры:
schema
В значении параметра указывается путь к файлу схемы, с помощью которой происходит валидация.
Тип параметра: строковое значение.
Опциональные параметры:
url
Параметр, позволяющий соотнести схему валидации JSON объекта и адрес, по которому был получен ответ. Для лучшего понимания, зачем следует вводить дополнительный url, приведем следующий пример:
validators: validator_json: response: - schema: schemes/json/ABO/Banking.Products.Brokerage.TradeHistory.Get.POST.rs.v1.0.json response_code: operator: "!~" pattern: "(?:500|502|503|504)" url: ^\/brokerage-info-ib\/rest\/v1\.0\/ib\/Banking\/Product\/Brokerage\/TradeHistory\/Get$ method: post - schema: schemes/json/ABO/Banking.Products.Brokerage.TradeHistory.Get.POST.rs.v2.0.json response_code: operator: "!~" pattern: "(?:500|502|503|504)" url: ^\/brokerage-info-ib\/rest\/v2\.0\/ib\/Banking\/Product\/Brokerage\/TradeHistory\/Get$ method: post
Имеется возможность использования регулярного выражения.
Для использования символов
\ ^ $ . | ? * + ( ) [ ] { } - в явном виде, необходимо их экранирование:
request: - schema: schemes/json/CREDIT_CAPACITY_MB/Suggestions.KLADR.post.v2.rq.json url: ^\/loan-suggestion\/services\/rest\/v2\/MYAPP\/Suggestions\.KLADR$ method: post
Тип параметра: строковое значение.
По умолчанию: не имеет значения по умолчанию.
method
Параметр, позволяющий соотнести схему валидации JSON объекта и метод запроса, которым он передается.
Т.е. если используется post, то схема, указанная в schema, будет применяться только для post-запросов.
validators: validator_json: request: - schema: schemes/json/ABO/Banking.Products.Brokerage.TradeHistory.Get.POST.rq.v1.0.json url: ^\/brokerage-info-ib\/rest\/v1\.0\/ib\/Banking\/Product\/Brokerage\/TradeHistory\/Get$ method: post
Тип параметра:
post;
put;
delete;
patch.
По умолчанию: не имеет значения по умолчанию.
params
Условие для вызова валидатора, при использовании параметров в ответе.
Тип параметра: последовательность параметров и их значения.
По умолчанию: не имеет значения по умолчанию.
Обязательные параметры:
name
В значении параметра указывается имя аргумента.
Тип параметра: текстовое значение.
operator
В значении параметра определяется операция для аргумента.
Тип параметра:
'=' - посимвольное равенство;
'!=' - посимвольное неравенство;
'~' - регулярное выражение с учетом регистра;
'~*' - регулярное выражение без учета регистра;
'!~' - негативное регулярное выражение с учетом регистра;
'!~*' - негативное регулярное выражение без учета регистра.
pattern
В значении параметра определяется паттерн, применяемый к аргументу.
Имеется возможность использования регулярного выражения.
Для использования символов
\ ^ $ . | ? * + ( ) [ ] { } - в явном виде, необходимо их экранирование.
Символ \ экранируется только тогда, когда находится в кавычках.
В примере ниже показывается, что экранируется связка \ с иным элементом (например #):
- name: "name_1" pattern: "[^\\#\\$\\%\\&\\(\\)\\*\\+\\,\\-\\.\\:\\;\\<\\=\\>\\?\\^\\_\\{\\|\\}\\~\\@]+" - name: "name_2" pattern: "[^ЁёА-я]+"
Тип параметра: текстовое значение.
Пример:
validators: validator_json: response: - schema: schemes/json/CWP/Banking.Products.Insurance.Application.Init.post.rs.v1.0.json method: post url: ^\/insurance\/v1\.0\/mobile\/application\/init$ params: - name: "cmd" operator: "=" pattern: "START"
allow_empty_body
В значении параметра указывается, нужно ли разрешать пустые тела или нет.
Тип параметра: логическое значение:
true;
false.
По умолчанию: не имеет значения по умолчанию.
transforms
В значении параметра определяется необходимость выполнения преобразований над телом запроса/ответа и последующая валидация результата.
На данный момент доступен единственный вариант - formdata to json.
Тип параметра: последовательность строковых значений.
PostFormDataToFlateJson.
По умолчанию:
transforms: - PostFormDataToFlateJson
transforms
Группа параметров, позволяющая указать, что соответствующая схема валидации применяется только для ответов, удовлетворяющих комбинации оператора и паттерна.
Тип параметра: группа параметров и их значения.
По умолчанию: не имеет значения по умолчанию.
Обязательные параметры:
operator
В значении параметра определяется операция для аргумента.
Тип параметра:
'=' - посимвольное равенство;
'!=' - посимвольное неравенство;
'~' - регулярное выражение с учетом регистра;
'~*' - регулярное выражение без учета регистра;
'!~' - негативное регулярное выражение с учетом регистра;
'!~*' - негативное регулярное выражение без учета регистра.
pattern
В значении параметра определяется паттерн, применяемый к статус коду ответа.
Тип параметра: текстовое значение.
response_proc_options
Используется в случае:
response is not None;
Тип параметра: группа параметров и их значения.
По умолчанию: не имеет значения по умолчанию.
Опциональные параметры:
max_inmemory_size
В значении параметра указывается максимальный размер сообщения, который валидируется без буферизации в файл.
Тип параметра: текстовое значение с суффиксом:
число без суффикса - байты;
k / K - килобайты;
m / M - мегабайты.
По умолчанию:
max_inmemory_size: 1M
request_error_code
В значении параметра указывается code status, который вернется клиенту при некорректном запросе.
Используется в случае:
request is not None;
Тип параметра: целочисленное значение.
По умолчанию: 403.
request_error_message
В значении параметра указывается текст сообщения об ошибке, который вернется клиенту при некорректном запросе.
Используется в случае:
request is not None;
Тип параметра: текстовое значение.
По умолчанию: не имеет значения по умолчанию.
response_error_code
В значении параметра указывается code status, который вернется клиенту при некорректном ответе.
Используется в случае:
response is not None;
Тип параметра: целочисленное значение.
По умолчанию: 403.
response_error_message
В значении параметра указывается текст сообщения об ошибке, который вернется клиенту при некорректном ответе.
Используется в случае:
response is not None;
Тип параметра: текстовое значение.
По умолчанию: не имеет значения по умолчанию.
response_error_message
В значении параметра указывается текст сообщения об ошибке, который вернется клиенту при некорректном ответе.
Используется в случае:
response is not None;
Тип параметра: текстовое значение.
По умолчанию: не имеет значения по умолчанию.
trailing_garbage_policy
В значении параметра указывается, допускается ли использование каких-либо символов после json-валидатора.
Используется в случае:
validator_xsd is not None;
Тип параметра: строковое значение:
weak - после json-валидатора допускаются любые символы;
standard - допускаются символы новой строки и переноса строк;
strong - после json-валидатора не допускается никаких символов.
По умолчанию: standard.
action_when_no_rule
В значении параметра указывается, какой решение будет принято валидатором, если не обнаружено подходящего правила для валидации сообщения
Тип параметра: строковое значение:
deny - сообщение блокируется;
ignore - сообщение пропускается.
По умолчанию: deny.
Пример использования json-валидатора:
validators:
validator_json:
request:
- schema: schemes/json/ABO/Banking.Products.Brokerage.TradeHistory.Get.POST.rq.v1.0.json
url: ^\/brokerage-info-ib\/rest\/v1\.0\/ib\/Banking\/Product\/Brokerage\/TradeHistory\/Get$
method: post
- schema: schemes/json/ABO/Banking.Products.Brokerage.TradeHistory.Get.POST.rq.v2.0.json
url: ^\/brokerage-info-ib\/rest\/v2\.0\/ib\/Banking\/Product\/Brokerage\/TradeHistory\/Get$
method: post
response:
- schema: schemes/json/ABO/Banking.Products.Brokerage.TradeHistory.Get.POST.rs.v1.0.json
response_code:
operator: "!~"
pattern: "(?:500|502|503|504)"
url: ^\/brokerage-info-ib\/rest\/v1\.0\/ib\/Banking\/Product\/Brokerage\/TradeHistory\/Get$
method: post
- schema: schemes/json/ABO/Banking.Products.Brokerage.TradeHistory.Get.POST.rs.v2.0.json
response_code:
operator: "!~"
pattern: "(?:500|502|503|504)"
url: ^\/brokerage-info-ib\/rest\/v2\.0\/ib\/Banking\/Product\/Brokerage\/TradeHistory\/Get$
method: post