OpenAPI
必須の依存関係: io.ktor:ktor-server-openapi
コード例: json-kotlinx-openapi
Ktorを使用すると、OpenAPI仕様に基づいたOpenAPIドキュメントを提供できます。
OpenAPI仕様は、次のいずれかの方法で提供できます。
どちらの場合も、OpenAPIプラグインはサーバー上で仕様を組み立て、HTMLとしてドキュメントをレンダリングします。
依存関係の追加
OpenAPIドキュメントを提供するには、ビルドスクリプトに
ktor-server-openapiアーティファクトを追加する必要があります。KotlinGroovyXMLオプションで、コードジェネレーターをカスタマイズしたい場合は、
swagger-codegen-generators依存関係を追加します。KotlinGroovyXML$swagger_codegen_versionは、swagger-codegen-generatorsアーティファクトの必要なバージョン(例:1.0.36)に置き換えることができます。
Ktor 3.4.0では、
OpenAPIプラグインはktor-server-routing-openapi依存関係を必要とします。 これは意図的な破壊的変更ではなく、Ktor 3.4.1で修正される予定です。 ランタイムエラーを避けるため、Ktor 3.4.0を使用している場合は手動で依存関係を追加してください。
静的なOpenAPIファイルを使用する
既存の仕様からOpenAPIドキュメントを提供するには、OpenAPIドキュメントへのパスを指定して openAPI() 関数を使用します。
次の例では、openapi パスに GET エンドポイントを作成し、提供されたOpenAPI仕様ファイルからSwagger UIをレンダリングします。
import io.ktor.server.plugins.openapi.*
// ...
routing {
openAPI(path="openapi", swaggerFile = "openapi/documentation.yaml")
}プラグインはまずアプリケーションのリソースから仕様を探します。見つからない場合は、java.io.File を使用してファイルシステムからの読み込みを試みます。
ランタイムOpenAPIメタデータを生成する
静的ファイルに依存する代わりに、OpenAPIコンパイラプラグインとルートアノテーションによって生成されたメタデータを使用して、ランタイムにOpenAPI仕様を生成できます。
このモードでは、OpenAPIプラグインはルーティングツリーから直接仕様を組み立てます。
openAPI(path = "openapi") {
info = OpenApiInfo("My API", "1.0")
source = OpenApiDocSource.Routing {
routingRoot.descendants()
}
}これにより、アプリケーションの現在の状態を反映した、生成されたOpenAPIドキュメントに /openapi パスでアクセスできます。
OpenAPIコンパイラ拡張およびランタイムAPIの詳細については、OpenAPI仕様の生成を参照してください。
OpenAPIの設定
デフォルトでは、ドキュメントは StaticHtml2Codegen を使用してレンダリングされます。openAPI {} ブロック内でレンダラーをカスタマイズできます。
routing {
openAPI(path="openapi", swaggerFile = "openapi/documentation.yaml") {
codegen = StaticHtmlCodegen()
}
}