SwiftでHTTP通信を行う際に、通信の内容や設定を細かく指定するために使われるのが「URLRequest」です。
APIへのリクエストやデータの送信を行うには、このURLRequestを使ってリクエストの構造を構築します。
この記事では、URLRequestの基本的な意味や使い方、主要プロパティ、活用シーン、注意点までをわかりやすく丁寧に解説します。
URLRequestとは?
URLRequestは、HTTPリクエスト(GET、POSTなど)の構成を定義する構造体です。
リクエストのURL・HTTPメソッド・ヘッダー・ボディなどを指定して、URLSession などの通信クラスに渡すために使用されます。
たとえば、「POSTでJSONデータを送信する」ような通信処理を行う際には、URLRequestを使ってリクエストの詳細を設定します。
具体例:シンプルなGETリクエストを作成する
1 2 3 4 5 6 7 8 9 10 11 12 13 |
import Foundation let url = URL(string: "https://example.com/api/items")! var request = URLRequest(url: url) request.httpMethod = "GET" let task = URLSession.shared.dataTask(with: request) { data, response, error in if let data = data { print(String(data: data, encoding: .utf8) ?? "No response") } } task.resume() |
通信が完了すると、受信したデータをコンソールに出力します。
URLRequestの主なプロパティと機能
URLRequestには、HTTP通信の内容を制御するためのプロパティがいくつも用意されています。
以下はその代表的なものです。
プロパティ名 | 説明 |
---|---|
url |
リクエストを送る先のURL |
httpMethod |
"GET"、"POST"など、HTTPのメソッド種別 |
allHTTPHeaderFields |
リクエストヘッダー(JSON形式指定や認証情報など) |
httpBody |
POSTやPUTのときに送信するデータ本体(Data型) |
timeoutInterval |
通信のタイムアウト秒数 |
cachePolicy |
キャッシュの扱い方(reloadIgnoringLocalCacheDataなど) |
これらのプロパティを適切に設定することで、APIへのリクエストの振る舞いを柔軟にコントロールできます。
具体例:JSONをPOST送信する
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
let url = URL(string: "https://example.com/api/create")! var request = URLRequest(url: url) request.httpMethod = "POST" request.setValue("application/json", forHTTPHeaderField: "Content-Type") let json: [String: Any] = ["name": "Test", "age": 30] request.httpBody = try? JSONSerialization.data(withJSONObject: json) let task = URLSession.shared.dataTask(with: request) { data, response, error in if let data = data { print(String(data: data, encoding: .utf8) ?? "No response") } } task.resume() |
Content-Typeヘッダーで「application/json」を明示的に指定するのもポイントです。
URLRequestの活用シーン
URLRequestは、以下のような場面で活用されます。
- Web APIからデータを取得するとき(GET)
- フォームデータやJSONをサーバーに送信するとき(POST)
- ヘッダー付きの認証付きリクエスト(Bearer Tokenなど)
- タイムアウトやキャッシュポリシーなどの細かい通信設定が必要なとき
- 複雑なリクエスト構築を事前に定義し、再利用したいとき
特に、シンプルなURLSession.dataTaskとは異なり、柔軟な制御が必要な通信処理ではURLRequestが不可欠です。
URLRequestを使うときの注意点
URLRequestは便利な構造体ですが、いくつかの重要なルールや慣習を守らないと、意図した通信ができなかったり、サーバー側にリクエストを拒否されることがあります。
実装の際に特に気をつけたいポイントは以下の通りです。
- httpBodyはData型で指定する必要があるため、JSONなどを送る場合は変換処理が必要
- httpMethodは大文字("GET", "POST"など)で指定するのが慣習
- Content-Typeなどのヘッダーは適切に設定しないとサーバーに拒否されることがある
- URLやBodyが無効な形式の場合は実行時にエラーになるため、事前にバリデーションするのが望ましい
これらの点を押さえておけば、より安定したHTTP通信を実現できます。
エラーの原因がわからないときは、まずこれらの設定を見直してみるとよいでしょう。
まとめ
今回はURLRequestについて詳しく紹介しました。
- URLRequestは、HTTPリクエストを構成するための構造体
- 通信先URLやHTTPメソッド、ヘッダー、ボディなどを柔軟に指定可能
- URLSessionと組み合わせてAPI通信やデータ送信を行う
- JSON送信や認証など、実用的な通信処理には不可欠な要素
- GETやPOSTの違いや通信設定に応じて、適切にプロパティを使い分ける
より実用的なAPI通信をSwiftで実装したいときは、ぜひ URLRequest を理解して活用していきましょう!