AsyncAPI ドキュメント検査

AsyncAPI 定義を貼り付けると、チャンネル、そこで宣言されたオペレーション、チャンネルごとのメッセージ、サーバー、バージョンが表示されます。解析はブラウザ内で完結し、定義は送信されません。

ブラウザ内でローカルに実行
このツールの処理はすべてブラウザ内で行われます。KivTools が入力内容をアップロード・保存したり、外部 API に送信したりすることはありません。
AsyncAPI ドキュメントPaste AsyncAPI JSON or YAML.
チャンネルとオペレーション

AsyncAPI 定義を検査する手順

AsyncAPI 定義を YAML または JSON で貼り付けると、チャンネル、そこで宣言されたオペレーション、チャンネルごとのメッセージ、サーバー、ドキュメントのバージョンが一覧表示されます。解析はブラウザ内で行われ、定義は送信されず、ページからリクエストは出ません。

これは仕様ファイルを読むための補助であり、ブローカーのクライアントでもバリデーターでもありません。貼り付けたテキストに実際に書かれている内容だけを示し、メッセージ参照がドキュメント内に存在しない定義を指している場合もそのまま扱います。

  1. フィールドに定義を貼り付けるか、サンプルを読み込むで小さな AsyncAPI 3.0 ドキュメントを読み込みます。
  2. ローカルで解析を押します。AsyncAPI 2.x と 3.0 の両方の形を、YAML でも JSON でも読み取ります。
  3. 右側のレポートを確認します。バージョン、タイトル、サーバー、そしてチャンネルごとにオペレーションとメッセージが1行で並びます。
  4. コピーでレポートを取り出し、クリアで入力欄とレポートを空にします。

レポートに載るもの、載らないもの

2つの仕様バージョンの読み方

AsyncAPI 3.0 ではチャンネルのメッセージは channel.messages にあり、operations セクションの各オペレーションが通常は $ref でチャンネルを指定します。2.x ではチャンネル自体が publish と subscribe を持ち、それぞれが1つのメッセージを運びます。検査ツールは両方の形を読み、3.0 の行は messages マップから、2.x の行は publish.message または subscribe.message からメッセージ名を取得します。

チャンネル参照は JSON Pointer のエスケープを適用した名前で解決するため、#/channels/user~1signed-up のような参照はキーが user/signed-up のチャンネルに対応します。メッセージが埋め込みオブジェクトではなく参照の場合は、列を空にせず参照末尾の名前を表示します。

レポートの内容

レポートは JSON なので、そのまま読むこともレビューで差分を取ることもできます。宣言された asyncapi バージョン、info のタイトルとバージョン、サーバー名、そしてチャンネルごとのオペレーションとメッセージ名が含まれます。2.x ではオペレーションはチャンネル自身から、3.0 ではチャンネル参照との照合で決まり、オペレーションが1つもないチャンネルは declared と表示して違いが分かるようにしています。

レポートの下には4つの数値が並びます。仕様バージョン、チャンネル数、オペレーション数、サーバー数です。その下には気づいた点、たとえば info.title がない、チャンネルが1つもない、といった内容が並ぶため、空や半端なドキュメントが完成品に見えることはありません。

このツールがしないこと

検査ツールは接続を開かず、トピックを購読せず、ドキュメントに書かれたサーバーへも一切アクセスしません。パネルの「ローカル」は文字どおりで、すでに読み込まれた JavaScript によるテキスト解析だけを行います。ネットワークを切っても動くのはそのためです。

AsyncAPI のリンターでもありません。バインディングが妥当か、参照されたスキーマが存在するか、仕様のすべての規則を満たすかは確認しません。ここで探していない誤りを含む定義も、正常に読めたものとして扱われます。規則ごとの検証には公式の AsyncAPI ツールを使い、このページは構造を素早く読むためのものと考えてください。

知っておきたい制限

パーサーが受け付けるのは通常の YAML と JSON です。重複キー、アンカー、一般的でない独自タグは軽量な YAML リーダーの対象外なので、それらに依存するドキュメントは完全な YAML ライブラリとは異なる読み方になることがあります。閉じられていない括弧や壊れたインデントは、推測せず行番号付きで報告します。

サイズはブラウザ側で処理するため、非常に大きな定義はサーバーではなく手元のメモリと時間を使います。数百チャンネルのドキュメントでも2秒ほどで読め、解析済みテキストを一度走査するだけなのでページは固まりません。

最近使ったツール: