Как понимать ошибку в ответе с параметром direction в JSON
Что проверяют
Умеете ли вы по ответу API понять, чья это ошибка: запроса, контракта или сервера, и превратить разбор в проверки и баг-репорт. Следом обычно просят составить набор тестов на поле direction.
Как отвечать
Идите по шагам:
- статус-код:
400или422значат, что сервер счёл запрос некорректным.500на неверное значение это уже баг: сервер обязан ответить ошибкой валидации, а не упасть; - тело ошибки: найдите поле, код и текст. Хорошо, если API отвечает в формате Problem Details (RFC 9457):
type,title,status,detail, иногда список полей с нарушениями; - контракт: откройте OpenAPI-спецификацию или Swagger. Для
directionтам должны быть тип (строка), допустимые значения (enum, напримерascиdesc), обязательность, значение по умолчанию, чувствительность к регистру; - фактический запрос: посмотрите, что реально ушло, во вкладке Network в DevTools, в Charles или Fiddler, в истории Postman. Часто клиент шлёт
ASCвместоascили число вместо строки; - воспроизведение: повторите запрос в Postman или
curlи сравните с контрактом.
Полезно знать, что на Java-бэкенде строка "asc" может не разобраться в перечисление со значением ASC, если регистронезависимый разбор не включён. Тогда это расхождение контракта и реализации, и его стоит обсудить с аналитиком.
Набор проверок строится по классам эквивалентности: каждое допустимое значение, другой регистр, пустая строка, null, отсутствующее поле, неверный тип (число, массив), пробелы по краям, неизвестное значение. Ожидание для невалидных: 4xx, понятное сообщение с именем поля и списком допустимых значений, без стек-трейса.
Где спотыкаются
Считают 500 на неверное значение нормой, раз данные действительно неправильные. Это баг: ошибку клиента сервер обязан так и классифицировать.
Проверяют только asc и desc и не трогают регистр, null и отсутствие поля, хотя именно там чаще всего ломается валидация.
Заводят баг без запроса и ответа. В хорошем репорте есть метод, URL, тело запроса, полный ответ, окружение и ссылка на пункт контракта.