はじめに
私は通信には必ずAlamofireを使用します。
URLSessionより簡潔にかけて便利だからです。
しかし、パラメータを設定しなければいけない時にエンコーディング形式を設定しないと動作しなかったので備忘録として残しておきます。
パラメータエンコーディングの種類
JSONEncoding.default
let headers: HTTPHeaders? = [
"user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.114 Safari/537.36"
]
let parameters: [String: Any] = ["id": "123456789"]
AF.request("https://example.com/api", method: .post, parameters: parameters, encoding: JSONEncoding.default, headers: headers).responseData { response in
guard let data = response.data else { return }
print(String.init(data: data, encoding: .utf8) ?? "")
}
JSONEncoding.prettyPrinted
let headers: HTTPHeaders? = [
"user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.114 Safari/537.36"
]
let parameters: [String: Any] = ["id": "123456789"]
AF.request("https://example.com/api", method: .post, parameters: parameters, encoding: JSONEncoding.prettyPrinted, headers: headers).responseData { response in
guard let data = response.data else { return }
print(String.init(data: data, encoding: .utf8) ?? "")
}
URLEncoding.default
let headers: HTTPHeaders? = [
"user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.114 Safari/537.36"
]
let parameters: [String: Any] = ["id": "123456789"]
AF.request("https://example.com/api", method: .post, parameters: parameters, encoding: URLEncoding.default, headers: headers).responseData { response in
guard let data = response.data else { return }
print(String.init(data: data, encoding: .utf8) ?? "")
}
URLEncoding.httpBody
let headers: HTTPHeaders? = [
"user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.114 Safari/537.36"
]
let parameters: [String: Any] = ["id": "123456789"]
AF.request("https://example.com/api", method: .post, parameters: parameters, encoding: URLEncoding.httpBody, headers: headers).responseData { response in
guard let data = response.data else { return }
print(String.init(data: data, encoding: .utf8) ?? "")
}
URLEncoding.queryString
let headers: HTTPHeaders? = [
"user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.114 Safari/537.36"
]
let parameters: [String: Any] = ["id": "123456789"]
AF.request("https://example.com/api", method: .post, parameters: parameters, encoding: URLEncoding.queryString, headers: headers).responseData { response in
guard let data = response.data else { return }
print(String.init(data: data, encoding: .utf8) ?? "")
}
おわり
ちょこっと調べてみましたがパラメータのエンコーディングに関しての情報が少ないように思いました。
そもそもencoding
という表記が分かりにくいような気がします。
何のエンコーディングなのかわからなのでparameterEncoding
このようにした方がようのかなと思いました。