Валидация по 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