ルーティングとリクエスト処理
ルートを定義し、HTTPリクエストを処理します。
「ルーティングとリクエスト処理」は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フィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- ルーティングとリクエスト処理
- コンテンツとJSONエンコーディング
- Fluent ORMとモデル
- ミドルウェアと認証