0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

swiftでHTTPリクエスト

Last updated at Posted at 2022-09-28

Postmanで自動生成する

Postmanで投げたいリクエストを作成し、以下のCodeボタンを押しSwiftを選択することでHTTPリクエスト周りのコードが自動生成してくれます。(慣れてない言語だとすごくありがたい機能ですね)

スクリーンショット 2022-09-28 15.18.42.png

スクリーンショット 2022-09-28 15.16.47.png

request.swift
import Foundation

var semaphore = DispatchSemaphore (value: 0)

let parameters = "{\n    \"name\": \"kitanote\",\n    \"age\": 32\n}"
let postData = parameters.data(using: .utf8)

var request = URLRequest(url: URL(string: "https://test.com/function-1")!,timeoutInterval: Double.infinity)
request.addValue("application/json", forHTTPHeaderField: "Content-Type")

request.httpMethod = "POST"
request.httpBody = postData

let task = URLSession.shared.dataTask(with: request) { data, response, error in 
  guard let data = data else {
    print(String(describing: error))
    semaphore.signal()
    return
  }
  print(String(data: data, encoding: .utf8)!)
  semaphore.signal()
}

task.resume()
semaphore.wait()

コーダブルにする

上のコードままではparametersの値が少々変更しづらいので、プログラムから利用しやすいようにします。Codableに準拠したUserを作成します。

request.swift
public struct User: Codable {
    public var name: String
    public var age: Int
    
    func jsonData() -> Data {
        return try! JSONEncoder().encode(self)
    }
    
    func jsonStr() -> String {
        let data = jsonData()
        return String(data: data, encoding: .utf8)!
    }
}

let user = User(name: "kitanote", age: 32)
let postData = user.jsonData() 

Data型
Data型はバイト列を表現する構造体で、ファイルの読み書きや通信など、外部システムとデータをやり取りする際に使用します。バイト列はさまざまなデータの表現に使用され、たとえば画像やJSONもバイト列によって表現できます。

0
1
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
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?