Sprawdzanie kontraktu API
Porównaj specyfikacje OpenAPI 3.x: zmiany łamiące, bezpieczne, security i allOf/oneOf - obsługa plików i 3.1 - w 100% w przeglądarce, bez wysyłania danych.
🔒 To narzędzie działa w całości w Twojej przeglądarce. Twoje pliki nigdy nie są wysyłane na serwer.
Narzędzie przeglądarkowe
Sprawdzanie kontraktu API
Każde z pól przyjmuje OpenAPI 3.x jako JSON lub YAML — wklej dane, przeciągnij plik na pole albo użyj Prześlij plik. Nic nie jest przesyłane na serwer — porównanie odbywa się w całości w Twojej przeglądarce. Naciśnij Ctrl+Enter aby porównać natychmiast.
Jak to działa
- Wklej specyfikację bazową (starą) i rewizyjną (nową) OpenAPI 3.x do dwóch pól - albo przeciągnij plik .json/.yaml/.yml na jedno z nich, albo użyj przycisku Upload file. Działa zarówno JSON, jak i YAML, formaty nie muszą się zgadzać.
- Naciśnij Compare, kontynuuj pisanie (porównanie uruchomi się automatycznie po krótkiej przerwie) albo naciśnij Ctrl+Enter, aby porównać natychmiast.
- Wyniki są pogrupowane na zmiany łamiące, bezpieczne/addytywne oraz inne modyfikacje - w tym zmiany dotyczące security, deprecacji, serwera oraz allOf/oneOf/anyOf - z liczbą wystąpień każdej grupy na górze. Kliknij odznakę z liczbą, aby ukryć lub pokazać daną grupę.
- Wybierz format raportu (Text, Markdown lub JSON) i naciśnij Download report, aby zapisać pełny diff.
FAQ
Co dokładnie sprawdza to narzędzie?
Wklejasz (lub przesyłasz) specyfikację bazową (starą) i rewizyjną (nową) OpenAPI 3.x, a narzędzie przechodzi przez każdą ścieżkę, parametr, request body, response, wymóg security oraz schemat w obu wersjach, po czym raportuje zmiany: dodane lub usunięte endpointy, zmiany wymagalności parametrów i pól requestu, zawężone typy lub enumy, zniknięte pola response lub kody statusu, zmiany wymogów security oraz zmiany kompozycji allOf/oneOf/anyOf.
Co liczy się jako zmiana "łamiąca"?
Wszystko, co mogłoby przestać działać u istniejącego klienta: usunięty endpoint, parametr lub pole requestu, które stało się wymagane, usunięte pole response lub kod statusu, pole, które nie jest już gwarantowane w response, albo zawężony typ/enum (w tym tablice typów nullable z OpenAPI 3.1, np. usunięcie "null" z `["string", "null"]`). Nowe endpointy, nowe pola opcjonalne i nowe pola response są addytywne i pokazywane osobno jako bezpieczne.
Czy narzędzie sprawdza zmiany schematu security i deprecacji?
Tak. Dodane/usunięte wymogi security (globalne i per operacja), zmiany definicji schematu security (np. przeniesienie API key z nagłówka do parametru zapytania), nowo oznaczone jako przestarzałe operacje oraz zmiany adresu URL serwera - wszystko to jest raportowane jako ustalenia informacyjne, a nie łamiące lub bezpieczne, ponieważ (zgodnie z domyślnym poziomem istotności, jaki nadaje tym kontrolom samo oasdiff) żaden kierunek nie jest zawsze poprawny lub błędny; to Ty decydujesz, czy ma to znaczenie dla Twojego API.
Czy narzędzie obsługuje kompozycję schematów allOf, oneOf i anyOf?
Tak. Elementy `allOf` są rozwiązywane i scalane przed porównaniem, więc pole wymagane dodane głęboko wewnątrz złożonego schematu wciąż zostanie wykryte. Zestawy wariantów `oneOf`/`anyOf` są porównywane i oznaczane jako informacyjne, gdy wariant zostanie dodany lub usunięty, ponieważ to, czy dana zmiana jest łamiąca, zależy od sposobu, w jaki Twoi klienci rozróżniają warianty.
Czy narzędzie obsługuje Swagger 2.0?
Nie - to narzędzie porównuje wyłącznie specyfikacje OpenAPI 3.x. Swagger 2.0 (starszy format) strukturyzuje parametry i body inaczej, więc zastosowanie tych samych reguł dałoby błędne wyniki. Wklejenie dokumentu Swagger 2.0 zwraca czytelny błąd zamiast cichego, błędnego diffa.
Czy moja specyfikacja jest gdzieś wysyłana?
Nie. Parsowanie i porównanie odbywają się w całości w Twojej przeglądarce - specyfikacja nigdy nie opuszcza Twojego urządzenia, w przeciwieństwie do większości innych narzędzi do porównywania OpenAPI, które przetwarzają przesłany plik na własnym serwerze, nawet gdy twierdzą, że go nie przechowują. Dotyczy to również opcji przesyłania pliku metodą przeciągnij i upuść: plik jest odczytywany lokalnie i nigdy nie jest transmitowany.
Czego to narzędzie nie sprawdza?
Porównuje treści request i response typu `application/json`, co obejmuje zdecydowaną większość API REST, ale nie ocenia innych typów treści, nagłówków response, opisów ani przykładów. `$ref` wskazujący poza dokument (osobny plik lub URL) jest raportowany jako nierozwiązywalny, a nie po cichu pomijany.
Czy mogę wkleić YAML zamiast JSON albo przesłać plik?
Tak, jedno i drugie. Każde pole przyjmuje niezależnie JSON lub YAML i wykrywa, którego formatu użyto, więc możesz porównać bazową specyfikację JSON z rewizją w YAML lub odwrotnie. Możesz też przeciągnąć plik .json/.yaml/.yml na dowolne z pól albo użyć przycisku Upload file - plik jest odczytywany w przeglądarce i nigdy nigdzie nie jest przesyłany.
Czy narzędzie obsługuje OpenAPI 3.1, a nie tylko 3.0?
Działa z każdym dokumentem zawierającym pole "openapi": "3.x" oraz obiekt "paths", co obejmuje zarówno wersję 3.0, jak i 3.1 - łącznie z tablicową formą `type` z 3.1 (np. `["string", "null"]`) - i odrzuca wyłącznie dokumenty, które wyglądają jak Swagger 2.0.
Czy mogę wyeksportować diff jako JSON, Markdown lub HTML?
Obsługiwane są Text (.txt), Markdown (.md) i JSON (.json) - wybierz jeden z rozwijanej listy formatów obok Download report przed pobraniem. Eksport JSON zawiera pełną listę ustaleń wraz z liczbą wystąpień dla każdego poziomu istotności, więc można go przekazać do innego skryptu (np. kontroli CI), jeśli tego potrzebujesz.
Czy narzędzie aktualizuje wynik w trakcie pisania, czy trzeba klikać Compare?
Działa oba sposoby: naciśnij Compare, aby uruchomić porównanie natychmiast, albo po prostu kontynuuj pisanie - po krótkiej przerwie porównanie uruchomi się automatycznie. Możesz też nacisnąć Ctrl+Enter (Cmd+Enter na Macu) w dowolnym z pól, aby porównać od razu, bez oczekiwania.
Jak wypadamy w porównaniu
| Funkcja | Online Tool Store | oasdiff | SpecShield |
|---|---|---|---|
| Porównuje Twoją specyfikację w całości w przeglądarce | Tak - nic nie opuszcza Twojego urządzenia, w tym przesłane pliki | Nie - przetwarzane na ich serwerze | Nie - przetwarzane na ich serwerze, a następnie odrzucane |
| Przyjmuje OpenAPI 3.x jako JSON lub YAML, wklejone lub przesłane | Tak - wklej, przeciągnij i upuść albo Upload file | Wklejanie lub przesyłanie | Wklejanie lub przesyłanie |
| Grupuje wyniki na łamiące, bezpieczne i inne zmiany | Tak, z odznakami umożliwiającymi filtrowanie kliknięciem | Tak, poprzez dedykowany tryb Breaking Changes | Tak, te same trzy grupy |
| Obsługuje kompozycję schematów allOf/oneOf/anyOf | Tak - allOf jest scalane przed porównaniem; zmiany wariantów oneOf/anyOf są oznaczane | Nieudokumentowane na publicznej stronie diff | Nieudokumentowane |
| Oznacza zmiany security, deprecacji i adresu URL serwera | Tak, wszystkie trzy (pokazywane jako informacyjne, nie łamiące/bezpieczne) | Security i deprecacja, poprzez wewnętrzny silnik oasdiff | Nieudokumentowane |
| Darmowe, bez konieczności zakładania konta | Tak | Tak, dla podstawowego diffa | Tak, dla podstawowego diffa |
Przydatne do szybkiej, prywatnej kontroli zmian łamiących przed wydaniem nowej wersji API - zwłaszcza gdy sama specyfikacja jest wrażliwa i wolisz nie wysyłać jej ani przesłanego pliku na serwer zewnętrzny.