#はじめに
APIKitやAlamofireなどのライブラリを使わず標準のURLsessionを用いたHTTPリクエストを実行するを簡単にまとめました。
##1. URLsession手順
- URLを生成
- URLRequestを生成
- 必要なパラメーターを付与
- 通信を行う
- レスポンスで受け取ったdata, response, errorの処理を行う
##2.基本のコード
###Get
基本は以下のコードのようになります。
let url = URL(string: "https://hogehoge.hoge")! //URLを生成
var request = URLRequest(url: url) //Requestを生成
let task = URLSession.shared.dataTask(with: request) { (data, response, error) in //非同期で通信を行う
guard let data = data else { return }
do {
let object = try JSONSerialization.jsonObject(with: data, options: []) // DataをJsonに変換
print(object)
} catch let error {
print(error)
}
}
task.resume()
###Post, Put
PostやPutにしたい場合はrequest.httpMethodを使います。
let url = URL(string: "https://hogehoge.hoge")!
var request = URLRequest(url: url)
request.httpMethod = "POST" // Postリクエストを送る(このコードがないとGetリクエストになる)
let task = URLSession.shared.dataTask(with: request) { (data, response, error) in
guard let data = data else { return }
do {
let object = try JSONSerialization.jsonObject(with: data, options: [])
print(object)
} catch let error {
print(error)
}
}
task.resume()
##3. Body, Header, Queryを付与したいときのコード
Bodyを付与(Get)
let url = URL(string: "https://hogehoge.hoge")!
var request = URLRequest(url: url)
request.httpBody = "email=hoge@hoge.com&username=hogehoge".data(using: .utf8) // 例)emailとpasswordを付与する場合
Headerを付与(Get)
let url = URL(string: "https://hogehoge.hoge")!
var request = URLRequest(url: url)
request.setValue("application/json", forHTTPHeaderField: "Content-Type") //jsonでヘッダーに付与
request.allHTTPHeaderFields = ["Token": "snsjetnglsdfnm"] // 例) ヘッダーにトークンを付与する場合
Queryを付与(Get)
var urlComponents = URLComponents(string: "https://hogehoge.hoge")! //URLComponentsでURLを生成
urlComponents.queryItems = [
URLQueryItem(name: "email", value: "hoge@hoge.com"), // 例) emailとpasswordを付与
URLQueryItem(name: "username", value: "hogehoge") //クエリを追加したければ、ここに書いていく
]
var request = URLRequest(url: urlComponents.url!)
→ 生成されるリクエスト "https://hogehoge.hoge?email=hoge@hoge.com&username=hogehoge"
##参考
下記のサイトを見ながら実装したので詳細はこちらをご確認ください。
URLSessionを用いた通信 - GitHub
HTTP GETとPOST(Swift)
【Swift】URLSessionまとめ