1. 概要
Ktorは、強力なKotlinプログラミング言語を使用して、接続されたシステムで非同期サーバーとクライアントを構築するためのフレームワークです。 これにより、組み込みサーバーを使用したスタンドアロンアプリケーションの開発が容易になります。
このチュートリアルでは、Ktorを使用してスタンドアロンサーバーアプリケーションを作成する方法について説明します。
2. Ktorアプリケーションのセットアップ
Ktorプロジェクトを設定することから始めましょう。 推奨される使いやすいアプローチであるGradleを使用します。 Gradleは、Gradleサイトに記載されている手順に従ってインストールできます。
build.gradleファイルを作成します。
group 'com.baeldung.kotlin'
version '1.0-SNAPSHOT'
buildscript {
ext.kotlin_version = '1.2.40'
ext.ktor_version = '0.9.2'
repositories {
mavenCentral()
}
dependencies {
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}
apply plugin: 'java'
apply plugin: 'kotlin'
apply plugin: 'application'
mainClassName = 'APIServer.kt'
sourceCompatibility = 1.8
compileKotlin { kotlinOptions.jvmTarget = "1.8" }
compileTestKotlin { kotlinOptions.jvmTarget = "1.8" }
kotlin { experimental { coroutines "enable" } }
repositories {
mavenCentral()
jcenter()
maven { url "https://dl.bintray.com/kotlin/ktor" }
}
dependencies {
compile "io.ktor:ktor-server-netty:$ktor_version"
compile "ch.qos.logback:logback-classic:1.2.1"
testCompile group: 'junit', name: 'junit', version: '4.12'
}
KtorとKtornettyサーバーパッケージをインポートしました。 Nettyは、この例で使用する組み込みサーバーです。
3. サーバーの構築
ソースフォルダーsrc/ main /kotlinにコードを追加してアプリケーションを作成します。
ここでは、mainメソッドを使用してファイルAPIServer.ktを作成します。
fun main(args: Array<String>) {
}
次に、組み込みのNettyサーバーを作成して起動します。
embeddedServer(Netty, 8080) {
}.start(wait = true)
ポート8080でサーバーを作成して起動します。 start()メソッドで wait = true を設定して、接続をリッスンします。
4. APIの構築
APIを追加しましょう。 HTTPリクエストを処理するために、Ktorはルーティング機能を提供します。
ルーティング機能をinstallブロックでアクティブ化します。ここで、特定のパスとHTTPメソッドのルートを定義できます。
val jsonResponse = """{
"id": 1,
"task": "Pay waterbill",
"description": "Pay water bill today",
}"""
embeddedServer(Netty, 8080) {
install(Routing) {
get("/todo") {
call.respondText(jsonResponse, ContentType.Application.Json)
}
}
}.start(wait = true)
この例では、サーバーは得るパスのリクエスト / todo と返信しますやること JSONオブジェクト 。 機能のインストールについては、セクションで詳しく説明します機能のインストール。
5. サーバーの実行
サーバーを実行するには、Gradleで実行タスクが必要です。
task runServer(type: JavaExec) {
main = 'APIServer'
classpath = sourceSets.main.runtimeClasspath
}
サーバーを起動するには、次のタスクを呼び出します。
./gradlew runServer
その後、 http:// localhost:8080/todo。を介してOutAPIにアクセスできます。
6. 機能のインストール
Ktorアプリケーションは通常、一連の機能で構成されています。 機能は、要求と応答のパイプラインに注入される機能と考えることができます。
DefaultHeaders 機能を使用して、すべての送信応答にヘッダーを追加できます。 ルーティングは、リクエストなどを処理するルートを定義できるもう1つの機能です。
機能を開発してインストールすることもできます。
DefaultHeaders 機能をインストールして、各リクエストにカスタムヘッダーを追加して見てみましょう。
install(DefaultHeaders) {
header("X-Developer", "Baeldung")
}
同様に、Ktorフレームワーク自体によって設定されたデフォルトのヘッダーをオーバーライドできます。
install(DefaultHeaders) {
header(HttpHeaders.Server, "My Server")
}
使用可能なデフォルトヘッダーのリストは、クラスにあります。 io.ktor.features.DefaultHeaders。
7. JSONの提供
文字列化されたJSONを手動で構築するのは簡単ではありません。 Ktorは、Gson。を使用してデータオブジェクトをJSONとして提供する機能を提供します。
build.gradleにGson依存関係を追加しましょう。
compile "io.ktor:ktor-gson:$ktor_version"
たとえば、 Author:という名前のデータオブジェクトを使用します。
data class Author(val name: String, val website: String)
次に、gson機能をインストールします。
install(ContentNegotiation) {
gson {
setPrettyPrinting()
}
}
最後に、作成者オブジェクトをJSONとして提供するサーバーへのルートを追加しましょう。
get("/author") {
val author = Author("baeldung", "baeldung.com")
call.respond(author)
}
著者APIは、著者データオブジェクトをJSONとして提供します。
8. コントローラの追加
複数のHTTPアクション要求を処理する方法を理解するために、ユーザーがTODOアイテムを追加、削除、表示、および一覧表示できるTODOアプリケーションを作成しましょう。
まず、Todoデータクラスを追加します。
data class ToDo(var id: Int, val name: String, val description: String, val completed: Boolean)
次に、 ArrayList を作成して、複数のTodoアイテムを保持します。
val toDoList = ArrayList<ToDo>();
次に、POST、DELETE、およびGETリクエストを処理するコントローラーを追加します。
routing() {
route("/todo") {
post {
var toDo = call.receive<ToDo>();
toDo.id = toDoList.size;
toDoList.add(toDo);
call.respond("Added")
}
delete("/{id}") {
call.respond(toDoList.removeAt(call.parameters["id"]!!.toInt()));
}
get("/{id}") {
call.respond(toDoList[call.parameters["id"]!!.toInt()]);
}
get {
call.respond(toDoList);
}
}
}
todo route を追加し、さまざまなHTTP動詞リクエストをそのエンドポイントにマッピングしました。
9. 結論
この記事では、Ktorフレームワークを使用してKotlinサーバーアプリケーションを作成する方法を学びました。
ボイラープレートコードを使用せずに、数分で小さなサーバーアプリケーションを構築しました。
いつものように、コードサンプルはGitHubのにあります。