🐶

【Swift】POST した JSON をそのまま受け取って嬉しがる

2024/06/17に公開

基本的なこととして。

  • JSON を Data 経由で POST する。(JSONEncoder)
  • リクエストヘッダーを追加。
  • 受け取った Data を struct インスタンスに。(JSONDecorder)
struct User: Codable {
  var name: String
  var age: Int
}

struct Anything: Codable {
  var json: User
}

extension URLSession {
  func postUser() async -> User? {
    do {
      let session = self
      let url = URL(string: "https://httpbin.org/anything/{anything}")!

      let user = User(name: "John", age: 18)

      var request = URLRequest(url: url)
      //request.setValue("Bearer 123456ABC", forHTTPHeaderField: "Authorization")
      //request.setValue("application/json", forHTTPHeaderField: "Accept")
      request.setValue("application/json", forHTTPHeaderField: "Content-Type")
      request.httpMethod = "POST"
      request.httpBody = try JSONEncoder().encode(user)

      //let (data, response) = try await session.data(from: url)
      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
      return receivedUser
    } catch {
      return nil
    }
  }
}

REST すべてのベースとなると思うので。

ここから派生していけばいい。

🧑🏻‍💻 参考

https://android.benigumo.com/20240615/json-encode-decode/

Discussion