リクエスト¶
Request
オブジェクトは、すべてのルートハンドラに渡されます。
app.get("hello", ":name") { req -> String in
let name = req.parameters.get("name")!
return "Hello, \(name)!"
}
これは、Vaporの他の機能への主要な窓口です。リクエストボディ、クエリパラメータ、ロガー、HTTPクライアント、AuthenticatorなどのAPIが含まれています。リクエストを通じてこれらの機能にアクセスすることで、計算を適切なイベントループ上に保ち、テスト用にモック化することができます。拡張機能を使用して、独自のサービスをRequest
に追加することもできます。
Request
の完全なAPIドキュメントはこちらで確認できます。
アプリケーション¶
Request.application
プロパティは、Application
への参照を保持しています。このオブジェクトには、アプリケーションのすべての設定とコア機能が含まれています。そのほとんどは、アプリケーションが完全に起動する前のconfigure.swift
でのみ設定されるべきであり、低レベルAPIの多くはほとんどのアプリケーションでは必要ありません。最も便利なプロパティの1つはApplication.eventLoopGroup
で、新しいEventLoop
が必要なプロセスのためにany()
メソッドを介してEventLoop
を取得するために使用できます。また、Environment
も含まれています。
ボディ¶
リクエストボディにByteBuffer
として直接アクセスしたい場合は、Request.body.data
を使用できます。これは、リクエストボディからファイルへのデータのストリーミング(ただし、この場合はリクエストのfileio
プロパティを使用すべきです)や、別のHTTPクライアントへの転送に使用できます。
クッキー¶
クッキーの最も便利な用途は組み込みのセッションを経由することですが、Request.cookies
を介してクッキーに直接アクセスすることもできます。
app.get("my-cookie") { req -> String in
guard let cookie = req.cookies["my-cookie"] else {
throw Abort(.badRequest)
}
if let expiration = cookie.expires, expiration < Date() {
throw Abort(.badRequest)
}
return cookie.string
}
ヘッダー¶
HTTPHeaders
オブジェクトはRequest.headers
でアクセスできます。これには、リクエストとともに送信されたすべてのヘッダーが含まれています。例えば、Content-Type
ヘッダーにアクセスするために使用できます。
app.get("json") { req -> String in
guard let contentType = req.headers.contentType, contentType == .json else {
throw Abort(.badRequest)
}
return "JSON"
}
HTTPHeaders
の詳細なドキュメントはこちらを参照してください。Vaporは、最もよく使用されるヘッダーの操作を簡単にするために、HTTPHeaders
にいくつかの拡張機能も追加しています。リストはこちらで確認できます。
IPアドレス¶
クライアントを表すSocketAddress
はRequest.remoteAddress
を介してアクセスでき、ログ記録やレート制限のために文字列表現Request.remoteAddress.ipAddress
を使用すると便利です。アプリケーションがリバースプロキシの背後にある場合、クライアントのIPアドレスを正確に表していない可能性があります。
app.get("ip") { req -> String in
return req.remoteAddress.ipAddress
}
SocketAddress
の詳細なドキュメントはこちらを参照してください。