OpenAPI 差分 & 破壊的変更チェック

OpenAPI の JSON または YAML バージョンを比較して、削除されたオペレーション、レスポンスの変更、新たに必須になった入力、レビューが必要なスキーマ変更を検出します。

ブラウザ内でローカルに実行
入力した API 定義はこのブラウザ内にとどまります。KivTools はどちらの仕様もアップロード、取得、実行しません。
以前の仕様
更新後の仕様
互換性の概要

破壊的変更ラベルは、削除されたオペレーション、削除されたレスポンス、新たに必須になった入力に注目します。スキーマ変更は互換性がクライアントに依存するため、レビュー対象としてフラグが付けられます。

変更レポート
  • 互換性の変更を確認するために2つの仕様を比較します。

リリース前に API コントラクトをレビューします

この差分を迅速なコントラクトレビューとして使い、バージョン管理された API テストで利用者への影響を確認してください。外部参照やリモートファイルは、このローカルチェッカーでは解決されません。

2 つの OpenAPI 仕様を比較する手順

公開済みの仕様を「Earlier specification」に、提案中の仕様を「Updated specification」に貼り付け、「仕様を比較」を押します。どちらの欄も JSON と YAML に対応し、2 つのドキュメントはブラウザ内にとどまります。アップロード・取得・実行は行われません。

結果は重要度ごとに整理されたレビュー用レポートで、各項目に JSON Pointer が付くため、新しいドキュメントのどの位置の変更かをたどれます。

  1. 公開済みの定義を「Earlier specification」に貼り付けるか、「サンプルを読み込む」で入力例を確認します。
  2. 提案中の定義を「Updated specification」に貼り付けます。
  3. 「仕様を比較」を押します。上部に各ドキュメントの操作数、破壊的変更の件数、レビューが必要な項目数が表示されます。
  4. 「レポートをコピー」で所見をテキストとして取り出します(1 項目 1 行)。「クリア」は両方の欄を空にし、コピーボタンを再び無効にします。

比較が対象とする範囲

破壊的変更として報告されるもの

操作の削除、必須パラメーターの削除、任意パラメーターの必須化、必須パラメーターの追加、リクエストボディの必須化は DANGER として並びます。既存の呼び出し元が依存しうるため、レスポンスステータスの削除とリクエストのコンテンツタイプ削除も同様です。

レビュー対象として示されるもの

スキーマの変更は DANGER ではなく WARNING です。クライアントを壊すかどうかはクライアント次第だからです。対象はパラメーター・リクエスト・レスポンスのスキーマ変更、コンポーネントスキーマの削除や編集、任意パラメーターの削除です。共有コンポーネントの編集は /components/schemas/<名前> として報告され、生成された定義では破壊的変更がここに現れます。

スキーマ比較では required、enum、type、allOf、anyOf、oneOf を集合として扱うため、並び順だけが変わった再生成ドキュメントは変更として報告されません。

2 つのドキュメントの突き合わせ方

操作はメソッドとパスで突き合わせます。そのためパスパラメーターの名前変更は、1 件の編集ではなく「削除された操作 + 追加された操作」として現れます。同一ドキュメント内の参照(#/components/...)は比較前に解決します。外部参照やリモート参照は取得しないため、別ファイルにしか存在しないパラメーターやスキーマは書かれている内容のまま比較されます。

Swagger 2.0 のドキュメントも同じ方法で比較します(パス・操作・パラメーター・レスポンスの読み方が同じため)。servers、セキュリティ要件、タグ、説明、examples は比較対象外です。

レポートの読み方とコピー

各項目には重要度(DANGER、WARNING、INFO、GOOD)、対象要素の JSON Pointer、変更内容の説明が付きます。pointer 内の ~1 はパス中のスラッシュを表すため、/paths/~1users/get は GET /users を指します。

空の入力欄はその旨が表示され、JSON または YAML として不正なドキュメントは失敗した行を示して拒否されるので、壊れた貼り付けが「差分なし」に見えることはありません。

最近使ったツール: