Online Tool Store Online Tool Store

Проверка контрактов API

Сравнивайте спецификации OpenAPI 3.x: breaking changes, безопасные изменения, security и allOf/oneOf — с загрузкой файлов и поддержкой 3.1, всё в браузере.

🔒 Этот инструмент работает полностью в вашем браузере. Ваши файлы никогда не загружаются на сервер.

Инструмент в браузере

Проверка контрактов API

Каждое поле принимает OpenAPI 3.x в JSON или YAML — вставьте текст, перетащите файл на поле или воспользуйтесь кнопкой Загрузить файл. Ничего не загружается на сервер — сравнение выполняется полностью в вашем браузере. Нажмите Ctrl+Enter для мгновенного сравнения.

Как это работает

  1. Вставьте базовую (старую) и новую (revision) спецификацию OpenAPI 3.x в два поля — или перетащите файл .json/.yaml/.yml на любое из них, либо воспользуйтесь кнопкой Upload file. Подходит и JSON, и YAML, форматы можно не совмещать.
  2. Нажмите Compare, продолжайте печатать (сравнение перезапустится автоматически после короткой паузы), либо нажмите Ctrl+Enter для мгновенного сравнения.
  3. Результаты группируются на breaking changes, безопасные/аддитивные изменения и прочие модификации — включая изменения security, deprecation, server и allOf/oneOf/anyOf — с количеством в каждой группе сверху. Нажмите на значок с числом, чтобы скрыть или показать группу.
  4. Выберите формат отчёта (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 StoreoasdiffSpecShield
Сравнивает вашу спецификацию полностью в браузере Да — ничего не покидает ваше устройство, включая загруженные файлыНет — обработка на их сервереНет — обработка на их сервере, затем удаление
Принимает 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 — особенно когда сама спецификация чувствительна и вы не хотите отправлять её (или загруженный файл) на сторонний сервер.

Похожие инструменты

Встроить этот инструмент

Вставьте это на свой сайт — он останется бесплатным, и файлы по-прежнему остаются в браузере посетителя, а не у вас или у нас.