The English version of quarkus.io is the official project site. Translated sites are community supported on a best-effort basis.

スタイリッシュAPI

今回のブログ記事では、OpenAPIとSwagger UIのQuarkusエクステンション(バージョン1.10+)で利用できる新しいスタイリングやその他の新しいオプションについて見ていきたいと思います。

以下の例のすべてのソースコードは、 ここにあります。

スタイリング

デフォルトスタイル

Swagger UIのデフォルトスタイルがバニラのSwagger UIからQuarkusブランドのページに変更されました。

quarkus_brand

この記事では主に Swagger UI に焦点を当てていますが、スタイリングオプションは GraphQL UIHealth UI にも適用されます。

テーマ

SwaggerのUIテーマが設定で利用できるようになり、デフォルトのテーマは「フィーリングブルー」になっています。

例えば、 quarkus.swagger-ui.theme プロパティーを設定することでテーマを変更することができます:

quarkus.swagger-ui.theme=outline
themed

また、元の(バニラの)Swagger UIテーマに戻すこともできます:

quarkus.swagger-ui.theme=original
original

テーマのオプションが用意されています:

  • feeling-blue (default)

  • オリジナル

  • flattop

  • material

  • monokai

  • muted

  • newspaper

  • outline

カスタムブランディングの一環として、Quarkusのロゴの代わりに独自のロゴを付与することができます。例えば、なんでも屋のACMEという会社を経営していて、オンラインストアにRESTサービスを利用していて、Swagger UIページをブランディングしたいとします:

acme logo
ホットリロードは、ロゴ変更には動作しません。とブラウザのキャッシュを覚えておいてください。ブラウザを 強制的にリフレッシュする必要があるかもしれません。

独自のロゴを提供するには、 logo.png というファイルを src/main/resources/META-INF/branding に配置する必要があります。

スタイル

さらに、独自の style.css を提供して、ブランディングを微調整することもできます。例として、Swagger UI画面の topbar を ACME のコーポレートカラーに合わせて変更することができます。

html{
    box-sizing: border-box;
    overflow: -moz-scrollbars-vertical;
    overflow-y: scroll;
}

*,
*:before,
*:after
{
    box-sizing: inherit;
}

body{
    margin:0;
    background: white;
}

.swagger-ui .topbar {
    background-color: whitesmoke; (1)
}

#footer {
    background-color: whitesmoke;
    font-family:sans-serif;
    color:#4da32c;
    font-size:70%;
    text-align: center;
}
1 ここでは topbar の背景色を設定します。
acme css

このCSSファイルの中で、任意のスタイル要素を変更することができます。 style.css というファイルを src/main/resources/META-INF/branding に配置する必要があります。

その他のスタイリングオプション

HTMLタイトルを設定したり、フッターを追加したりすることもできます:

quarkus.swagger-ui.title=ACME API
quarkus.swagger-ui.footer=© 2020 . ACME

設定プロパティーを介して設定できる他の OpenAPI Header フィールドと一緒に( /blog/openapi-for-everyone/[この記事]で説明しています)。

mp.openapi.extensions.smallrye.info.title=ACME online store API
mp.openapi.extensions.smallrye.info.version=1.0.0
mp.openapi.extensions.smallrye.info.description=We make everything, and sell it online
mp.openapi.extensions.smallrye.info.contact.email=it@acme.com
mp.openapi.extensions.smallrye.info.contact.name=ACME IT
mp.openapi.extensions.smallrye.info.contact.url=https://www.acme.com
mp.openapi.extensions.smallrye.info.license.name=Apache 2.0
mp.openapi.extensions.smallrye.info.license.url=http://www.apache.org/licenses/LICENSE-2.0.html

UIは完全にブランド化されています:

acme footer

その他のスワガーUIオプション

Quarkus(バージョン1.10+)で利用できるもう一つの新機能は、Swagger UIで利用できる 設定オプションを任意に設定できることです。例えば、 urls を設定して、Swagger UI にペットストア(デフォルトで選択されているオプションとして)を追加することができます。

quarkus.swagger-ui.urls.default=/openapi
quarkus.swagger-ui.urls.petstore=https://petstore.swagger.io/v2/swagger.json
quarkus.swagger-ui.urls-primary-name=petstore

これにより、 topbar は、提供されたURLのドロップダウンボックスを持つように変更されます。

petstore

別の例として、 supportedSubmitMethods は特定の HTTP メソッドタイプに対して Try it out ボタンを非表示にすることができます。

quarkus.swagger-ui.supported-submit-methods=get

POSTTry it out ボタンがなくなっていることに注意してください。

try it out

他のSwagger UIオプションはすべてUIの設定が可能になりました。

その他の小さな新機能

OpenAPIとSwagger UIの2つの小さな新機能を紹介します。Health Endpointsを追加する機能と、実行時にUIやSchemaを無効にする機能です。

Add Health API to Open API

smallrye-health エクステンションを使用している場合は、OpenAPI にヘルスエンドポイントを追加することができます。

quarkus.health.openapi.included=true
health

実行時に無効化

アプリにUIが含まれている場合( quarkus.swagger-ui.always-include=true )、アプリ起動時にUIを無効にできるようになりました。

java -jar -Dquarkus.swagger-ui.enable=false target/yourapp-1.0.0-runner.jar

これは Swagger UI ページで HTTP 404 (Not Found) を 返します。

同様に、以下のようにしてスキーマを無効にすることができます (通常は /openapi の下にあります):

java -jar -Dquarkus.smallrye-openapi.enable=false target/yourapp-1.0.0-runner.jar