はじめに
WebSocketやMqttなどを実務で使うことが増えてきており,
Event駆動アーキテクチャのAPIインタフェースを定義するための手段を探していたところ,
AsyncAPI を知りました.
AsyncAPIは,検索がなかなかしづらいネーミングになっていることや,日本語の記事もまだまだ少ないです.
また,「OpenAPIのように stoplight.io でブラウザ経由で簡単に,開発メンバーへシェアする」
ような方法については,日本語では,まとまっていないように見受けられたため,今回簡単にですが記載していみました.
※ 注意:私は組み込み,モバイルアプリ,バックエンドをメインにするエンジニアです.
フロント系の技術には疎いです.より良い方法があればご指摘下さい.
AsyncAPIとは
他の方になりますが,
OpenAPIスキーマ互換なAsyncAPIとは?
で紹介されておりましたので,こちらをご確認ください.
いい感じに読みたい
AsyncApi/generatorで静的ページを生成する
公式機能を使い,htmlファイルを生成.AWS S3などにアップロード・共有するという一番愚直なやり方です.
以下のコマンドで生成できました.
cd /path/to/your/workspace
npm install @asyncapi/generator
# globalに入れてもよい.
./node_modules/.bin/ag test.yaml @asyncapi/html-template \
-o output \
-p singleFile=true
# デフォルトだと,singleFile=falseで,cssなどが別ファイルになります.
また,GithubActionsで,CIを回したいときは, github-action-for-generator があるようです.
(Githubを使っていても,組織のポリシーによって利用できない場合は頑張りましょう...)
AsyncApi/stduio を使う
どちらかといえば,開発向けのツールになりますが,こちらを自社等でホスティングして共有することでもできそうです.
Dockerでも動くので,やんごとなき事情により,静的ページでシェアすることができない場合や,リモートで複数人で手直ししつつの場合などに有用そうです.
こちら でサンプルを確認できます.asyncapi/generator
で生成したものと同じ形式になります.
bump.sh
Twitterで何気なくつぶやいてみたら,AsyncAPIのFounderのFranから紹介されました.
Bump.shは,OpenAPIとAsyncAPI どちらにも対応している サービスです.(強い)
私が所属するチームでは,OpenAPIをStoplightでシェアしていることもあり,AsyncAPIだけでなく,OpenAPIも一括で管理できる非常にありがたいサービスです.
CI周りも手厚いサポートがなされており,GithubActions経由でデプロイもできます.
費用等については,時期により変わるかと思いますが,2023年1月15日現在では,Freeから利用できるようです.(Freeの場合,Privateレポジトリは一つのみという制限付き)
こちら に私のほうでデプロイしたサンプルを公開しておきます.
なお,asyncapi/generator
で生成されるフォーマットとは異なるようです.
例えばpublish/subscribe以下の externalDocs
が反映されない,
schema
の一覧が末尾に表示されないなど,公式との挙動差があるようです.
個人的には,sample/action/{deviceId}
のような,channel
ではなく,summary
をサイドバーにデフォルトで表示してくれる bump.sh
ほうが好みです.
最後に
紹介してくれてありがとうございます.