Swagger 仕様を複数ファイル出力する goa プラグイン Multiswagger を作った

作りました。

github.com

goa とは

Go でマイクロサービスな Web API を作るためのライブラリです。

github.com

goa の DSL で design と呼ばれる定義を書いたら、 goagen というジェネレータを使ってサーバやクライアントなど各種のコードを生成することができます。日本語だと @ikawaha さんによる連載記事が非常にわかりやすくてオススメです。

ikawaha.hateblo.jp

Multiswagger とは

Swagger 仕様を出力するための goagen のプラグインです。 goagen に内蔵されているデフォルトの Swagger ジェネレータと互換性がありますが、Description() という DSLJSON のとき、そのキー毎に Swagger 仕様を出力します。

apidsl.Description(`{
    "key1": "value1",
    "key2": "value2"
}`)

例えば上記のような design を入力としたとき

swagger.key1.json と swagger.key1.yaml

description: value1

が、 swagger.key2.json と swagger.key2.yaml

description: value2

が出力されます。

i18n のために各言語の説明を書いてそれぞれ別のファイルに出力する、という使い方が考えられます。

apidsl.Description(`{
    "en": "This is an english description.",
    "ja": "これは日本語の説明です。"
}`)

というか他のユースケースが思いつきませんでした🤔

非常にニッチなコードですがよければ使ってみてください。