Swift Academy · レッスン

ルーティングとリクエスト処理

ルートを定義し、HTTPリクエストを処理します。

レッスン 1/413 ステップ

「ルーティングとリクエスト処理」はCoddyKit上の無料Swift Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはSwift Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Swift Academyコースには全4レッスンが含まれています。

Vapor とは

Vapor は、SwiftNIO を基盤とする人気のサーバーサイド Swift Web フレームワークです。HTTP バックエンド(API や Web サイト)をすべて Swift で記述でき、iOS アプリと同じ言語、さらにはモデルまで共有できます。

import Vapor

let app = try await Application.make(.detect())

Application とルート

Application オブジェクトは Vapor サーバーの中心です。ここにルートを登録します。ルートとは、HTTP メソッドとパスを、レスポンスを返すハンドラークロージャに対応付けるものです。

app.get("hello") { req in
    "Hello, world!"
}

HTTP メソッドのヘルパー

Vapor には、HTTP 動詞ごとにヘルパーが用意されています。app.get、app.post、app.put、app.patch、app.delete です。それぞれにパスの構成要素とハンドラーを渡します。

app.post("users") { req in
    "Created a user"
}
app.delete("users") { req in
    "Deleted a user"
}

パスセグメント

複数の文字列セグメントを渡して、入れ子になったパスを構築します。以下の呼び出しは GET /api/v1/status に応答します。

app.get("api", "v1", "status") { req in
    "OK"
}

ルートパラメーター

コロンで始まるセグメントを使うと、動的な値を取得できます。リクエストからは req.parameters.get(_:) で読み取ります。以下では、/users/42 にリクエストすると 42 が取得されます。

app.get("users", ":id") { req -> String in
    let id = req.parameters.get("id") ?? "unknown"
    return "User id is " + id
}

型付きパラメーター

get に型を渡すことで、パラメーターを具体的な型に変換できます。変換に失敗すると、Vapor が自動的に 404 を返すため、ハンドラーを簡潔に保てます。

app.get("posts", ":id") { req -> String in
    let id = try req.parameters.require("id", as: Int.self)
    return "Post number " + String(id)
}

クエリパラメーター

req.query を使って URL のクエリアイテムを読み取ります。/search?term=swift の場合は、term を直接デコードできます。存在しないオプショナル値は、そのまま nil として返されます。

app.get("search") { req -> String in
    let term = try req.query.get(String.self, at: "term")
    return "Searching for " + term
}

ルートグループ

app.grouped(...) を使うと、共通のプレフィックスの下に関連するルートをまとめられます。これにより、パスの構成要素を繰り返さずに済み、関連するエンドポイントを一つにまとめられます。

let users = app.grouped("users")
users.get { req in "List users" }      // GET /users
users.post { req in "Create user" }    // POST /users

異なるレスポンスタイプの返却

ハンドラーは String、HTTPStatus、カスタムの Content 型、または完全に構築した Response を返せます。Vapor はそれぞれを HTTP レスポンスにエンコードできます。

app.delete("cache") { req -> HTTPStatus in
    // clear something
    return .noContent // 204
}

Abort によるエラーの送出

Abort(_:) を送出すると、特定の HTTP ステータスと任意の理由を指定してリクエストを途中で終了できます。Vapor はそれを適切な JSON エラーレスポンスに変換します。

app.get("secret") { req -> String in
    guard req.headers.first(name: "X-Key") == "open" else {
        throw Abort(.forbidden, reason: "Missing key")
    }
    return "Welcome"
}

非同期ハンドラー

Vapor 4 以降は async/await を完全にサポートしています。ハンドラークロージャを async としてマークし、データベースやネットワーク処理には内部で try await を使います。

app.get("ping") { req async throws -> String in
    try await Task.sleep(for: .milliseconds(10))
    return "pong"
}

クイックチェック:ルーティング

ルーティングに関する知識を確認しましょう。

まとめ:ルーティングとリクエスト処理

これで Vapor サーバーを構築できるようになりました。

  • app.get/post/put/patch/delete とパスセグメントを使ってルートを登録します。
  • :param で動的な値を取得し、req.parameters から読み取ります(require(_:as:) で型を指定できます)。
  • req.query からクエリアイテムを読み取り、grouped でルートをまとめます。
  • 文字列、ステータス、コンテンツを返し、エラーには Abort を送出し、非同期ハンドラーを使用します。
無料で開始

AI チューターと学ぶ Swift — 無料

ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。

コース
122
レッスン
409

よくある質問

「ルーティングとリクエスト処理」レッスンは無料ですか?

はい。「ルーティングとリクエスト処理」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Swift Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Swift Academyコースには全4レッスンが含まれています。

「ルーティングとリクエスト処理」で何を学びますか?

ルートを定義し、HTTPリクエストを処理します。 ブラウザで直接実行するハンズオンコードでSwift Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Swift Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのSwift Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。

「ルーティングとリクエスト処理」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このSwift Academyレッスンでコードを書いて実行できますか?

はい。すべてのSwift Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

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

  1. ルーティングとリクエスト処理
  2. コンテンツとJSONエンコーディング
  3. Fluent ORMとモデル
  4. ミドルウェアと認証
← Swift Academyに戻る