先日、紹介しましたこれ。
https://httpbin.org/anything/{anything}
に対して JSONを POST するとそのまま JSONで返ってきます。
キー名は「json」です。
※ 以下では POST してないので null。
{
"args": {},
"data": "",
"files": {},
"form": {},
"headers": {
"Accept": "application/json",
"Accept-Encoding": "gzip, deflate, br, zstd",
"Accept-Language": "ja-JP,ja;q=0.9,en-US;q=0.8,en;q=0.7",
"Content-Length": "0",
"Host": "httpbin.org",
"Origin": "https://httpbin.org",
"Priority": "u=1, i",
"Referer": "https://httpbin.org/",
"Sec-Ch-Ua": "\"Google Chrome\";v=\"125\", \"Chromium\";v=\"125\", \"Not.A/Brand\";v=\"24\"",
"Sec-Ch-Ua-Mobile": "?0",
"Sec-Ch-Ua-Platform": "\"macOS\"",
"Sec-Fetch-Dest": "empty",
"Sec-Fetch-Mode": "cors",
"Sec-Fetch-Site": "same-origin"
},
"json": null,
"method": "POST",
"url": "https://httpbin.org/anything/{anything}"
}
練習してみます。
Web-API を使うには必須です。
struct User: Codable {
var name: String
var age: Int
}
struct Anything: Codable {
var json: User
}
let session = URLSession.shared
let url = URL(string: "https://httpbin.org/anything/{anything}")!
let user = User(name: "John", age: 18)
var request = URLRequest(url: url)
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpMethod = "POST"
request.httpBody = try JSONEncoder().encode(user)
let (data, response) = try await session.data(for: request)
print((response as! HTTPURLResponse).statusCode)
//print(String(data: data, encoding: .utf8)!)
let receivedUser = (try JSONDecoder().decode(Anything.self, from: data)).json
たくさんのキーを持つ JSON がレスポンスで返ってくる場合は、
必要なキーだけを struct のプロパティ(この場合は「json」)
にすれば良いようです。
これで、
「JSON を使った POSTリクエスト」
と
「JSON のレスポンスからクラスオブジェクトを取得」
ができますね!