Skip to the content.

Валидация JSON через OpenAPI: как находить сломанные API-ответы через apivalidator.ru

Согласитесь, было бы удобно иметь простой инструмент, который позволяет:

и сразу понять:

Простой сервис, который помогает быстро проверить, соответствует ли реальный ответ API его спецификации, и сразу показывает, где именно возникает проблема.

Недавно один мой товарищ рассказал о проблеме, которую он сейчас решает. В свое время я сам сталкивался с такой. Честно говоря, думал, что такие вещи уже остались в прошлом — но, как оказалось, нет. Несколько лет назад в одной крупной компании у нас была такая же довольно типичная, но крайне неприятная ситуация.

Бэкенд представлял собой большой легаси-монолит, почти полностью написанный на PHP. А PHP, как известно, язык с нестрогой типизацией — и пока всё остаётся внутри него, это обычно не вызывает серьёзных проблем. Сложности начались в тот момент, когда фронты стали переходить на новые сетевые движки, основанные на кодогенерации из Swagger.

И именно тогда проявилась проблема, которая раньше просто не была заметна. Из-за нестрогой типизации одни и те же данные могли приходить в разных форматах. Например, числовое поле могло быть как числом, так и строкой (“12345”). С булевыми значениями ситуация была ещё интереснее. Один и тот же флаг мог приходить в нескольких вариантах:

На прежнем сетевом движке это «работало»: значения просто пытались привести к нужному типу, пока не получалось. Проблема в том, что таким образом ошибки не исправлялись, а тихо маскировались.

Но с переходом на новый движок:

Со временем мы начали постепенно приводить бэкенд в порядок:

Однако оставалась одна неприятная деталь. Представим, что API возвращает массив из 100 объектов: 99 из них корректны, 1 — нет. И этого достаточно, чтобы сломать всё.

Особенно неприятно, если это происходит, например, на главной странице: интерфейс не загружается, появляются ошибки, пользователь не получает никакой внятной обратной связи. В такой ситуации пользователю неважно, какой именно объект оказался некорректным — он просто закрывает страницу. А QA, конечно же, заводит срочный баг на фронт (потому что «ничего не работает»)

В какой-то момент стало очевидно, что не хватает простого инструмента, который позволял бы: — взять спецификацию API — взять реальный ответ сервера — и быстро проверить их на соответствие С понятным ответом: где именно возникает проблема и почему.