0Pricing
Kotlin Academy · レッスン

ルーティングと型付きパラメータ

パスパラメータとクエリパラメータを持つルートを定義し、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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. Ktorプロジェクトのセットアップ:embeddedServerとApplicationモジュール
  2. ルーティングと型付きパラメータ
  3. Content Negotiationとkotlinx.serialization
  4. 認証プラグイン:JWTとSession
← Kotlin Academyに戻る