Ответ
JSON Schema использовалась как контракт для валидации структуры данных, что повышало надежность API и конфигураций.
Области применения:
- Валидация ответов API: Гарантия, что endpoint всегда возвращает данные согласованного формата.
- Валидация конфигурационных файлов: Проверка настроек приложения/сервиса перед деплоем.
- Документирование форматов данных: Схема служила актуальным и машиночитаемым описанием.
- Генерация тестовых данных: Использование схемы для создания корректных mock-данных.
Пример схемы для ответа API пользователя:
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "User",
"description": "Объект пользователя системы",
"type": "object",
"properties": {
"id": {
"type": "integer",
"minimum": 1,
"description": "Уникальный идентификатор"
},
"email": {
"type": "string",
"format": "email",
"maxLength": 255
},
"isActive": {
"type": "boolean",
"default": false
},
"roles": {
"type": "array",
"items": {
"type": "string",
"enum": ["user", "editor", "admin"]
},
"uniqueItems": true
},
"createdAt": {
"type": "string",
"format": "date-time"
}
},
"required": ["id", "email", "createdAt"],
"additionalProperties": false
}
Интеграция в автотесты (Python с библиотекой jsonschema):
import requests
import jsonschema
from jsonschema import validate
# Загрузка схемы
USER_SCHEMA = { ... } # Схема как выше
def test_get_user_schema():
"""Тест проверяет, что ответ API пользователя соответствует JSON Schema."""
response = requests.get("https://api.example.com/users/1")
assert response.status_code == 200
user_data = response.json()
# Валидация ответа против схемы
try:
validate(instance=user_data, schema=USER_SCHEMA)
except jsonschema.ValidationError as e:
pytest.fail(f"Ответ API не соответствует схеме: {e.message}")
Использование схем в CI/CD пайплайне позволяло отлавливать breaking changes в API на этапе прогона тестов, до попадания в прод.