Перейти к содержанию

Описание JSON схем валидации#

Для валидации приходящих запросов на вебхук сервер используются JSON схемы валидации. Схемы валидации составляются согласно API методам и проверяют входящие вебхуки на наличие необходимых полей и их типы. Схемы валидации обновляются по мере развития API и разработки новых вебхуков. Вы также можете расширить список схем валидации, если это необходимо.

JSON схемы для проверки вебхуков расположены в директории jsonSchema и копируются в директорию сборки при запуске скрипта сборки. Вы можете добавлять любые файлы .json в jsonSchema, они будут загружены в программу при ее запуске.

JSON схемы имеют следующую структуру:

{
  "$id": "schemas",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "yourNameOfObject": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "type": "object",
      "properties": {
        "sampleField": {
          "type": "string"
        },
        "sampleRef_Field": {
          "$ref": "#/properties/commonSchemaComponents/properties/senderData"
        }
      },
      "required": [
        "typeWebhook",
      ],
      "additionalProperties": true
    },
    "yourOtherObject": {
        ...
    }
  }
}

Для работоспособности вашего .jsonфайла, любой .json файл должен содержать только один объект с "properties". Все объекты для валидации должны находиться в объекте "properties". В противном случае файл JSON будет проигнорирован.

Программа при запуске соединяет все JSON файлы из директории jsonSchema в один объект, объединяя в properties структуры (приведенной выше) поля properties всех файлов из директории.

Для валидации вебхуком предусмотрено сравнение JSON следующим образом:

  1. Получение JSON из тела запроса {...};

  2. Создание нового JSON объект по типу "Имя проверяемого вебхука" = {<JSON из полученного тела запроса>};

  3. Валидирование полученного JSON с созданным JSON.

Пример:

  1. Валидация вебхука с типом incomingMessageReceived прописана в файле jsonSchema/incomingMessage.json:
    {
      "$id": "schemas",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "type": "object",
      "properties": {
        "incomingMessageReceived": {
          ...
        }
    }
    
  2. Сервер получает вебхук с типом incomingMessageReceived:
    {
        "typeWebhook": "incomingMessageReceived",
        ...
    }
    
  3. Валидатор создает новый JSON объект, именуя его по типу полученного вебхука и заполняя данными, полученными в теле запроса:
    "incomingMessageReceived": {
        {
            "typeWebhook": "incomingMessageReceived",
            ...
        }
    }
    
  4. Сформированный json объект сверяется с полями всех JSON файлов из директории. Данные для валидации находятся в "properties".