Описание 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 следующим образом:
-
Получение JSON из тела запроса
{...}
; -
Создание нового JSON объект по типу
"Имя проверяемого вебхука" = {<JSON из полученного тела запроса>}
; -
Валидирование полученного JSON с созданным JSON.
Пример:
- Валидация вебхука с типом
incomingMessageReceived
прописана в файлеjsonSchema/incomingMessage.json
:
{ "$id": "schemas", "$schema": "https://json-schema.org/draft/2020-12/schema", "type": "object", "properties": { "incomingMessageReceived": { ... } }
- Сервер получает вебхук с типом
incomingMessageReceived
:
{ "typeWebhook": "incomingMessageReceived", ... }
- Валидатор создает новый JSON объект, именуя его по типу полученного вебхука и заполняя данными, полученными в теле запроса:
"incomingMessageReceived": { { "typeWebhook": "incomingMessageReceived", ... } }
- Сформированный json объект сверяется с полями всех JSON файлов из директории. Данные для валидации находятся в "properties".