0
2

More than 1 year has passed since last update.

【Swift】Alamofireのパラメータエンコーディングについて

Last updated at Posted at 2022-07-11

はじめに

私は通信には必ず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このようにした方がようのかなと思いました。

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2