Код 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
  1. Сначала тип, при ошибке сразу возврат.
  2. Путь передавайте третьим аргументом с умолчанием "$".

Решите в тренажёре

Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.

Термины по теме