Код Senior API-автотесты обновлено
Мини-валидатор схемы ответа
Условие
Напишите validate(data, schema), поддерживающую подмножество JSON Schema: type (object, array, string, integer, number, boolean, null), required, properties, items, enum. Вернуть список ошибок "<путь>: <сообщение>" в порядке обхода:
- путь корня
$, поле$.user.id, элемент$.items[0]; expected <type>, если тип не совпал (дальше этот узел не проверять);missing requiredдля каждого отсутствующего обязательного поля (путь поля), затем проверкаpropertiesпо порядку в схеме для имеющихся полей;not in enum, если значение не из списка.
bool не считается ни integer, ни number; integer подходит под number.
Примеры
validate({"id":1,"name":"A"}, {"type":"object","required":["id","name"],"properties":{"id":{"type":"integer"},"name":{"type":"string"}}}) // []
validate({"id":"1"}, {"type":"object","required":["id","name"],"properties":{"id":{"type":"integer"}}}) // ["$.name: missing required", "$.id: expected integer"]
validate([1, "x", 3], {"type":"array","items":{"type":"integer"}}) // ["$[1]: expected integer"]
Как подойти
Подсказки: 2
- Сначала тип, при ошибке сразу возврат.
- Путь передавайте третьим аргументом с умолчанием "$".
Решите в тренажёре
Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.