ルーティングと型付きパラメータ
パスパラメータとクエリパラメータを持つルートを定義し、routeブロックでグループ化します。
「ルーティングと型付きパラメータ」はCoddyKit上の無料Kotlin Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはKotlin Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Kotlin Academyコースには全4レッスンが含まれています。
Ktorルーティングの基礎
Ktorのルーティングは、install(Routing) { ... } または簡略記法の routing { ... } でインストールするプラグインです。ルートはHTTPメソッド関数で定義します。使用できる関数は get、post、put、delete、patch です。
routing {
get("/hello") { call.respondText("Hello!") }
post("/items") { /* handle POST */ }
}パスパラメーター
{name} を使用してパスパラメーターを定義します。call.parameters["name"] でアクセスできます。値の型は常に String? です。
get("/users/{id}") {
val id = call.parameters["id"] ?: return@get call.respondText("Missing id", status = HttpStatusCode.BadRequest)
call.respondText("User: $id")
}省略可能なパスセグメント
? を追加するとセグメントを省略可能にできます。{name?} のように記述します。セグメントが存在しない場合、call.parameters["name"] は null を返します。
get("/posts/{slug?}") {
val slug = call.parameters["slug"]
if (slug == null) call.respondText("All posts")
else call.respondText("Post: $slug")
}型付きパラメーターへの変換
Parameters の拡張関数を使用すると、パスパラメーターを型付きの値に変換できます。Ktorには組み込みのヘルパーが用意されていますが、独自のヘルパーを作成することもできます。
get("/items/{id}") {
val id = call.parameters["id"]?.toLongOrNull()
?: return@get call.respond(HttpStatusCode.BadRequest, "Invalid id")
call.respondText("Item #$id")
}クエリパラメーター
call.request.queryParameters["key"] を使用してクエリ文字列のパラメーターにアクセスします。同じキーに複数の値がある場合は、getAll("key") で取得できます。
get("/search") {
val q = call.request.queryParameters["q"] ?: ""
val page = call.request.queryParameters["page"]?.toIntOrNull() ?: 1
call.respondText("Search: $q, page $page")
}ルートのグループ化
route("/prefix") { ... } を使用すると、関連するルートを共通のプレフィックスの下にまとめられます。重複を減らし、ルーティングツリーを読みやすくできます。
route("/api/v1") {
route("/users") {
get { /* list users */ }
get("/{id}") { /* get user by id */ }
post { /* create user */ }
}
}関数によるルートの整理
ルーティング設定をモジュール化するには、ルートグループを Route の拡張関数に切り出します。
fun Route.userRoutes() {
route("/users") {
get { /* ... */ }
post { /* ... */ }
get("/{id}") { /* ... */ }
}
}
// In Application module:
routing { userRoutes() }リクエストボディの処理
リクエストボディは、テキスト、バイト列、またはデシリアライズ済みオブジェクトとして受け取れます(ContentNegotiationプラグインが必要です)。型付きデシリアライズには call.receive を使用します。
post("/users") {
val user = call.receive<UserDto>()
call.respond(HttpStatusCode.Created, user)
}ステータスコードを指定したレスポンス
細かく制御するには call.respond(status, body) を使用します。簡便なメソッドとして、call.respondText()、call.respondFile()、call.respond(HttpStatusCode.NotFound) も使用できます。
get("/users/{id}") {
val user = userRepo.find(call.parameters["id"])
if (user == null) call.respond(HttpStatusCode.NotFound)
else call.respond(user)
}ワイルドカードとテールカードのルート
単一のワイルドカードセグメントには * を使用します。{...}(テールカード)を使用すると、パスの残り全体を1つのパラメーターとして一致させられます。
get("/static/{path...}") {
val filePath = call.parameters.getAll("path")?.joinToString("/") ?: ""
call.respondText("Serving: $filePath")
}ルートの優先順位
Ktorはルートを宣言された順序で評価します。より具体的なルートをワイルドカードより先に宣言してください。2つのルートが一致する場合は、最初に一致したルートが選択されます。
確認問題
Ktorで複数のルートを共通のURLプレフィックスの下にまとめるには、どうすればよいですか。
振り返り:ルーティングと型付きパラメーター
要点:
routing { }内でget、postなどを使用してルートを定義します- パスパラメーター:
{name}—call.parameters["name"]でアクセスします - クエリパラメーター:
call.request.queryParameters["key"] route("/prefix") { }でルートをまとめ、Routeの拡張関数に切り出しますcall.receiveで型付きのボディを受け取ります(ContentNegotiationが必要です)()
よくある質問
「ルーティングと型付きパラメータ」レッスンは無料ですか?
はい。「ルーティングと型付きパラメータ」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Kotlin Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Kotlin Academyコースには全4レッスンが含まれています。
「ルーティングと型付きパラメータ」で何を学びますか?
パスパラメータとクエリパラメータを持つルートを定義し、routeブロックでグループ化します。 ブラウザで直接実行するハンズオンコードでKotlin Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Kotlin Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのKotlin Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。
「ルーティングと型付きパラメータ」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このKotlin Academyレッスンでコードを書いて実行できますか?
はい。すべてのKotlin Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- Ktorプロジェクトのセットアップ:embeddedServerとApplicationモジュール
- ルーティングと型付きパラメータ
- Content Negotiationとkotlinx.serialization
- 認証プラグイン:JWTとSession