1年以上の開発の後、Ktor 2.0が新機能と大きな変更と共にリリースされた。Ktor 2.0は、非同期クライアントとサーバアプリケーションを作成するためのKotlinフレームワークである。
サーバ側については、Ktor 2.0では、フレームワークの拡張性を向上させるためにPluginsと呼ばれる新機能が導入されている。これは以前はFeaturesと呼ばれていた。名前が示すように、プラグインアーキテクチャの実装ができるようにすることで、機能をシンプルな方法で拡張できる。
また、Kotlin/Nativeサポートも導入されている。これはKtor1.6で追加されたGraalVMの既存のサポートを補完するものである。他にはランダムポートのサポート、テストAPI、タイプセーフルーティング、XMLシリアル化、プラグイン向けのサブルートが改善されている。
クライアント側については、Ktor 2.0では共通のHTTPリクエストを管理するためのシンプルなAPIを提供する。レスポンスはHttpResponse
タイプであり、bodyAsTextを使ってレスポンスボディにアクセスできる。
リトライ機能がクライアントに組み込まれ、リトライ間の時間を指定できるようになった。Ktor 2.0には、クライアント側にコンテンツネゴシエーション機能も追加されている。一方で、サーバ側ではすでに実装されている。
上記の機能に加えて、クライアントには、basic()
、bearer()
ヘルパー関数などの認証用のショートカットAPIも含まれている。
以前のバージョンから新バージョンの2.0への移行を支援するために、Ktorチームは、IntelliJ IDEAに含まれるドキュメントと移行ツールを提供する。IntelliJ IDEAは、大きな変更とリファクタリングされたパッケージに関連するすべての問題を修正することを目的としたものである。
Ktorを使った単純なサーバの作成は、次のようにシンプルである。
fun main(args: Array<String>) {
embeddedServer(Netty, 8080) {
routing {
get("/") {
call.respondText("Hello, world!", ContentType.Text.Html)
}
}
}.start(wait = true)
}
上記のコードでは、localhost:8080
で組み込みのWebサーバが実行される。ルーティングプラグインがインストールされ、ルートパスでGET HTTPリクエストを受信すると「Hello, world」と応答する。
Ktorアプリケーションは、TomcatなどのServlet 3.0以降のAPIをサポートする任意のサーブレットコンテナでホストすることができる。あるいは、NettyまたはJettyを使用してスタンドアロンで実行することもできる。KtorではKotlinコルーチンを使って、直感的な命令フローで非同期プログラミングを実装する。上記のすべてのサーバコンテナでは、スレッドのブロッキングを回避するために非同期I/O機能が使われている。
さらに、Ktorでは、Websocketプロトコル、Micrometerメトリックによる監視、JWTとOAuthによる承認、および、Mustache、Thymeleaf、Velocityなどのさまざまなテンプレートエンジンがサポートされている。
Ktorは公式のJetBrains製品であり、コミュニティからのコントリビューションとともにJetBrainsのチームによって開発されている。
開発者は、このInfoQチュートリアルから、Ktorを使ってマイクロサービスベースのアプリケーションを作成する方法について詳しく知ることができる。このチュートリアルはJetBrainsの開発者アドボカシー担当副社長のHadi Hariri氏が提供するものである。