Проверка контрактов API
Сравнивайте спецификации OpenAPI 3.x: breaking changes, безопасные изменения, security и allOf/oneOf — с загрузкой файлов и поддержкой 3.1, всё в браузере.
🔒 Этот инструмент работает полностью в вашем браузере. Ваши файлы никогда не загружаются на сервер.
Инструмент в браузере
Проверка контрактов API
Каждое поле принимает OpenAPI 3.x в JSON или YAML — вставьте текст, перетащите файл на поле или воспользуйтесь кнопкой Загрузить файл. Ничего не загружается на сервер — сравнение выполняется полностью в вашем браузере. Нажмите Ctrl+Enter для мгновенного сравнения.
Как это работает
- Вставьте базовую (старую) и новую (revision) спецификацию OpenAPI 3.x в два поля — или перетащите файл .json/.yaml/.yml на любое из них, либо воспользуйтесь кнопкой Upload file. Подходит и JSON, и YAML, форматы можно не совмещать.
- Нажмите Compare, продолжайте печатать (сравнение перезапустится автоматически после короткой паузы), либо нажмите Ctrl+Enter для мгновенного сравнения.
- Результаты группируются на breaking changes, безопасные/аддитивные изменения и прочие модификации — включая изменения security, deprecation, server и allOf/oneOf/anyOf — с количеством в каждой группе сверху. Нажмите на значок с числом, чтобы скрыть или показать группу.
- Выберите формат отчёта (Text, Markdown или JSON) и нажмите Download report, чтобы сохранить полный diff.
FAQ
Что именно проверяет этот инструмент?
Вы вставляете (или загружаете) базовую (старую) и новую (revision) спецификацию OpenAPI 3.x, инструмент проходит по каждому пути, параметру, телу запроса, ответу, требованию безопасности и схеме в обеих версиях и сообщает, что изменилось: добавленные или удалённые эндпоинты, изменения обязательности параметров и полей запроса, сужение типов или enum, исчезнувшие поля ответа или коды статуса, изменения требований безопасности и изменения композиции allOf/oneOf/anyOf.
Что считается «breaking»-изменением?
Всё, что может нарушить работу существующего клиента: удалённый эндпоинт, параметр или поле запроса, ставшее обязательным, удалённое поле или код статуса ответа, поле, которое больше не гарантируется в ответе, или тип/enum, ставший уже (включая массивы nullable-типов OpenAPI 3.1, например удаление "null" из `["string", "null"]`). Новые эндпоинты, новые необязательные поля и новые поля ответа являются аддитивными и показываются отдельно как безопасные.
Проверяются ли изменения схем безопасности и deprecation?
Да. Добавленные/удалённые требования безопасности (глобальные и для отдельных операций), изменения определений схем безопасности (например, перенос API-ключа из заголовка в query-параметр), недавно помеченные как deprecated операции и изменения server URL — всё это отображается как информационные находки, а не breaking или safe, поскольку (в соответствии с тем, как эти проверки по умолчанию классифицирует сам oasdiff) ни одно из направлений не является универсально правильным или неправильным; вы сами решаете, важно ли это для вашего API.
Обрабатывается ли композиция схем allOf, oneOf и anyOf?
Да. Члены `allOf` разрешаются и объединяются перед сравнением, поэтому обязательное поле, добавленное глубоко внутри составной схемы, всё равно будет обнаружено. Наборы вариантов `oneOf`/`anyOf` сравниваются и помечаются как информационные при добавлении или удалении варианта, поскольку является ли конкретное изменение breaking, зависит от того, как ваши клиенты различают варианты.
Поддерживается ли Swagger 2.0?
Нет — сравниваются только спецификации OpenAPI 3.x. Swagger 2.0 (более старый формат) описывает параметры и тела запросов иначе, поэтому применение тех же правил дало бы неверные результаты. При вставке документа Swagger 2.0 вместо тихого неверного diff появится понятная ошибка.
Отправляется ли моя спецификация куда-либо?
Нет. И разбор, и сравнение выполняются в вашем браузере — спецификация никогда не покидает ваше устройство, в отличие от большинства других инструментов сравнения OpenAPI, которые обрабатывают загруженный файл на своём сервере, даже если утверждают, что не хранят его. Это верно и при использовании загрузки/перетаскивания файла: файл читается локально и никогда не передаётся.
Что инструмент не проверяет?
Он сравнивает тела запросов и ответов `application/json`, что покрывает подавляющее большинство REST API, но не оценивает другие типы содержимого, заголовки ответов, описания или примеры. `$ref`, указывающий за пределы документа (на отдельный файл или URL), отмечается как неразрешимый, а не тихо пропускается.
Можно ли вставить YAML вместо JSON или загрузить файл?
Да, и то и другое. Каждое поле принимает JSON или YAML независимо и определяет, какой из них вы использовали, поэтому можно сравнивать базовую спецификацию в JSON с новой версией в YAML или наоборот. Также можно перетащить файл .json/.yaml/.yml на любое поле или воспользоваться кнопкой Upload file — файл читается в браузере и никуда не загружается.
Поддерживается ли OpenAPI 3.1, а не только 3.0?
Инструмент работает с любым документом, у которого есть поле "openapi": "3.x" и объект "paths", что охватывает и 3.0, и 3.1 — включая форму массива для `type` в 3.1 (например, `["string", "null"]`) — и отклоняет только документы, похожие на Swagger 2.0.
Можно ли экспортировать diff в JSON, Markdown или HTML?
Поддерживаются Text (.txt), Markdown (.md) и JSON (.json) — выберите нужный формат в выпадающем списке рядом с Download report перед скачиванием. Экспорт в JSON включает полный список находок и счётчики по уровням серьёзности, поэтому его можно передать в другой скрипт (например, CI-проверку), если это нужно.
Обновляется ли результат по мере ввода или нужно нажимать Compare?
Работает и так, и так: нажмите Compare для мгновенного перезапуска или просто продолжайте печатать — после короткой паузы сравнение выполнится автоматически. Также можно нажать Ctrl+Enter (Cmd+Enter на Mac) в любом из полей, чтобы сравнить немедленно, не дожидаясь паузы.
Сравнение с другими инструментами
| Функция | Online Tool Store | oasdiff | SpecShield |
|---|---|---|---|
| Сравнивает вашу спецификацию полностью в браузере | Да — ничего не покидает ваше устройство, включая загруженные файлы | Нет — обработка на их сервере | Нет — обработка на их сервере, затем удаление |
| Принимает OpenAPI 3.x в JSON или YAML, вставкой или загрузкой | Да — вставка, перетаскивание или Upload file | Вставка или загрузка | Вставка или загрузка |
| Группирует результаты на breaking, safe и прочие изменения | Да, со значками с фильтрацией по клику | Да, через отдельный режим Breaking Changes | Да, те же три группы |
| Обрабатывает композицию схем allOf/oneOf/anyOf | Да — allOf объединяется перед сравнением; изменения вариантов oneOf/anyOf отмечаются | Не документировано на публичной странице diff | Не документировано |
| Отмечает изменения security, deprecation и server URL | Да, все три (показаны как информационные, а не breaking/safe) | Security и deprecation, через базовый движок oasdiff | Не документировано |
| Бесплатно, без регистрации | Да | Да, для базового diff | Да, для базового diff |
Подходит для быстрой приватной проверки breaking changes перед выпуском новой версии API — особенно когда сама спецификация чувствительна и вы не хотите отправлять её (или загруженный файл) на сторонний сервер.