[Swift]POSTでAPIを叩く
GETでAPIを叩くのは別記事で紹介した。
次はPOSTメソッドでAPIを叩きたいと思う。
実装するにあたって、疑問に思っていたことは以下。
- どうやってhttpメソッドをPOSTにするのか
- リクエストに値をどのように含めるか
SwiftでGETメソッドをリクエストで送る時に、特に何を書かなくてもメソッドがデフォルトでGETになる。
ふと、「じゃあ、POSTの時はどのようにすれば?」と感じた。
URLRequestのプロパティ、httpMethod = “POST”を指定する。
次にリクエストに値をどのように含めるのか?という点。
具体的には、httpBodyプロパティに含めればOK。
コードは以下の通り。
func loginAPI() {
print("login api")
let url = URL(string: "http://127.0.0.1:8000/api-auth/login/")!
var request = URLRequest(url: url)
request.httpMethod = "POST" // POSTリクエスト
request.httpBody = "username=hoge&password=hoge123".data(using: .utf8) // Bodyに情報を含める
URLSession.shared.dataTask(with: request, completionHandler: {(data, response, error) in
print("data: \(String(describing: data))")
print("response: \(String(describing: response))")
print("error: \(String(describing: error))")
print("------------------------------------")
do{
let responseData = try JSONSerialization.jsonObject(with: data!, options: [])
print(responseData)
}
catch {
print(error)
}
}).resume()
}
上記コードではusernameとpasswordを含めて認証を行なっている。叩いているAPIはローカルのDRF。
参考:
https://www.office-matsunaga.biz/ios/description.php?id=54
https://qiita.com/shungo_m/items/64564fd822a7558ac7b1