0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Gradle Swagger Generator PluginでAPI文書の展開レベルを変更する

Last updated at Posted at 2019-01-07

Gradle Swagger Generator Plugin を使ってAPIドキュメントを生成する場合に、初期状態の展開レベルを変更する方法を紹介します。

前提

ここでは、 SpringFox のようにソースコードからAPIドキュメントを生成するケースではなく、手書きしたYAML形式のSwaggerドキュメントからSwagger UI形式のAPIドキュメントを生成するケースを想定しています。

動作確認したソフトウェアのバージョンは次の通りです。

  • Oracle JDK 1.8
  • Gradle 4.10
  • Gradle Swagger Generator Plugin 2.16.0

カスタマイズ前

doc/api.yaml にAPIドキュメントがあるとして、Swagger UIを生成するための設定はおおむね次のようになっているはずです。

plugins {
    id 'org.hidetake.swagger.generator' version '2.16.0'
}

dependencies {
    swaggerUI 'org.webjars:swagger-ui:3.20.3'
}

swaggerSources {
    api {
        inputFile = file('doc/api.yaml')
    }
}

Swagger UI形式のAPIドキュメントを生成してブラウザで確認すると、すべてのエンドポイントが完全に展開された状態になることが分かります。最初のうちはこれでも問題ありませんが、APIの数が増えてくると全体が把握しづらくなります。

$ ./gradlew generateSwaggerUI
$ open build/swagger-ui-api/index.html

image.png

カスタマイズ後

そこで、 公式ドキュメント に従って設定をカスタマイズします。プラグインの設定としてカスタマイズできるわけではなく、カスタマイズ済みのSwagger UIのHTMLファイルを用意してプラグインに組み込むという点がポイントです。

  1. Swagger UI 公式ページから index.html を取得する

  2. Gradle Swagger Generator Plugin に組み込めるようindex.htmlを修正し、設定値をお好みでカスタマイズする

    diff --git a/doc/index.html b/doc/index.html
    index 549f5f3..163140a 100644
    --- a/doc/index.html
    +++ b/doc/index.html
    @@ -40,6 +40,10 @@
         window.onload = function() {
           // Begin Swagger UI call region
           const ui = SwaggerUIBundle({
    +        spec: window.swaggerSpec,   // (mandatory) use source of swagger-spec.js
    +        validatorUrl: null,         // (mandatory) disable validator
    +        docExpansion: 'list',       // expand only the tags
    +
             url: "https://petstore.swagger.io/v2/swagger.json",
             dom_id: '#swagger-ui',
             deepLinking: true,
    
  3. カスタマイズしたindex.htmlでデフォルトのindex.htmlを上書きする

    diff --git a/build.gradle b/build.gradle
    index 0aadabc..286e95b 100644
    --- a/build.gradle
    +++ b/build.gradle
    @@ -49,5 +49,13 @@ jacocoTestReport {
     swaggerSources {
         api {
             inputFile = file('doc/api.yaml')
    +        ui {
    +            doLast {
    +                copy {
    +                    from 'doc/index.html'
    +                    into outputDir
    +                }
    +            }
    +        }
         }
     }
    

再度、Swagger UI形式のAPIドキュメントを生成してブラウザで確認すると、今度はAPIエンドポイントの一覧が見出し(タグ)レベルだけで表示されるようになっていることが分かります。

$ ./gradlew generateSwaggerUI
$ open build/swagger-ui-api/index.html

image.png

展開レベルの変更だけに限らず、ほかのカスタマイズも同様の手順で実現できると思います。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?