Перевірка контрактів 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 — особливо коли сама специфікація чутлива і ви не хочете надсилати її (або завантажений файл) на сторонній сервер.