前回のREST APIをiOSアプリでも使うお話です。
こちらも割と簡単ですが、Kotlin=Javaに比べると型に関してはシビアです。
インストール
CocoaPodsでインストールする。
ライブラリが対応していれば簡単ですね。
1 2 3 4 5 6 7 |
target 'watch' do # Comment the next line if you don't want to use dynamic frameworks use_frameworks! pod 'Alamofire', '~> 5.2' // ← 追加 end |
その後、
1 |
>$ pod install |
これでインストール完了です。
使い方
こちらもAndroidの時と同じような感じでできますが、今回はModelでデータクラスを作ります。Model | ApiModel.swift |
---|---|
Controller | ViewController.swift |
GETの場合
例として架空のREST APIを用意します。内容 | メンバー情報取得 | ||
---|---|---|---|
詳細 | メンバー情報を取得する | ||
URI | /gray/ | ||
METHOD | GET | ||
認証 | Authorization: Bearer ais7Uki8d300ibGhQOee51die | ||
パラメータ | No parameters | ||
レスポンス |
|
前回同様データクラスをまとめます。
1 2 3 4 5 6 7 8 9 10 11 |
struct ResponseMembers: Codable{ let code: Int, let message: String, let members: [Members], } struct Members: Codalbe{ let id: Int, let name: String, let type: String, } |
Kotlinと少し違いますが、考え方は同じなので慣れれば理解するのは難しくありません。
実装方法ですが、以下のようになります。
事前に[import Alamofire]をインポートしましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
let access_token= "xxxxxxxxxxxxxxxxxxxxxxx" let Auth_header: HTTPHeaders = [ "Content-Type" : "application/json", "Authorization" : "Bearer " + access_token, "Accept" : "application/json", "User-Agent": Define.user_agent, ] let apiUrl = Apis.ApiUrl+"gray" AF.request(apiUrl, method: .get, parameters: nil, headers: Auth_header) .responseData { response in switch response.result { case .success(let data): let decoder: JSONDecoder = JSONDecoder() do { let res: ResponseMembers = try decoder.decode(ResponseMembers.self, from: data) } catch { print(self.TAG+"デコードに失敗しました") } case .failure(let error): print(self.TAG+" error", error) } } |
Heaerの設定もHTTPHeaders型で指定すれば簡単に設定できます。
注意すべきところは戻り値をJSONでデコードするのですが、設定している型と少しでも違うとでコーー度失敗になるところですかね
REST APIの仕様変更でパラメータに値が追加されるだけでエラーになるのは注意が必要です。
POSTの場合
内容 | メンバー情報新規登録 | ||
---|---|---|---|
詳細 | メンバー情報を新規登録する | ||
URI | /gray/ | ||
METHOD | POST | ||
認証 | Authorization: Bearer ais7Uki8d300ibGhQOee51die | ||
パラメータ |
|
||
レスポンス |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
let access_token = "xxxxxxxxxxxxxxxxxxx" let Auth_header: HTTPHeaders = [ "Authorization" : "Bearer " + access_token, "Accept": "application/json", "User-Agent": Define.user_agent, ] let params: [String: String] = ["name" : "Hisashi", "type" : "Guiter"] let apiUrl = Apis.ApiUrl+"gray" AF.request( apiUrl, method: .post, parameters: params, headers: Auth_header ) .responseData { response in switch response.result { case .success(let data): let decoder: JSONDecoder = JSONDecoder() do { let res: ResponseMembers = try decoder.decode(ResponseMembers.self, from: data) } catch { print(self.TAG+"デコードに失敗しました") } case .failure(let error): print(self.TAG+" error", error) } } |
POSTも簡単ですね。
パラメータに配列を用意して流し込むだけで大丈夫です!
kotlinの用にクラスを追加してもいい気がしますが…
PUTの場合
内容 | メンバー情報の変更 | ||
---|---|---|---|
詳細 | メンバー情報を変更する | ||
URI | /gray/{id} | ||
METHOD | PUT | ||
認証 | Authorization: Bearer ais7Uki8d300ibGhQOee51die | ||
パラメータ |
|
||
レスポンス |
|
実装すると
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
let access_token = "xxxxxxxxxxxxxxxxxxx" let Auth_header: HTTPHeaders = [ "Authorization" : "Bearer " + access_token, "Accept": "application/json", "User-Agent": Define.user_agent, ] let params: [String: String] = ["name" : "Hisaichi", "type" : "Guiter"] let apiUrl = Apis.ApiUrl+"gray" AF.request( apiUrl, method: .put, parameters: params, headers: Auth_header ) .responseData { response in switch response.result { case .success(let data): let decoder: JSONDecoder = JSONDecoder() do { let res: ResponseMembers = try decoder.decode(ResponseMembers.self, from: data) } catch { print(self.TAG+"デコードに失敗しました") } case .failure(let error): print(self.TAG+" error", error) } } |
ほぼPOSTと同じです
まとめ
実装自体は簡単です。
実際は非同期にしたり色々とチェックなどが必要ですが、REST APIでの接続であれば気軽に実装できるのがよいかと思います。