有名ライブラリ、「APIKit」の超簡単な導入を説明します。
注:初心者向けかつ、実践的ではありません。
Udemyのオススメの講座
Contents
APIKitとは
APIKitはhttpクライアントライブラリです。
jsonをデコードしてくれるHimotokiというライブラリとセットで使用することが多いです。
httpクライアントといってもイメージできないかもしれません。
ざっくりいうとwebサーバーとやりとりをする場合に使用します。
Twitterの場合
- ツイートを取得する
- いいねを登録する場合
- etc
つまり、ほとんどのアプリで必要なものになります。
逆に必要のないアプリは、シンプルな「メモ帳」などの自分のスマホ内で完結するようなものは必要ありません。
似たような役割のライブラリにAlamofireがあります。
こちらの方が有名かもしれないですね。
導入
まずはAPIKitの導入方法を説明していきます。
ターミナルでこちらのコマンドを打ってください。
こちらでpodfileを作成してくれます。
1 |
pod init |
podfileを編集
podfileって何??という方はこちらです。
podfileに
pod ‘APIKit’
という記述を
target ‘プロジェクト名’ do
end
の間に記述してください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
# Uncomment the next line to define a global platform for your project # platform :ios, '9.0' target 'プロジェクト名' do # Comment the next line if you're not using Swift and don't want to use dynamic frameworks use_frameworks! pod 'APIKit' # Pods for AAAPPPIII end |
記述できたら、
ターミナルでこちらのコマンドを打ってAPIKitをインストールします。
1 |
pod install |
インストールが完了したら
実際にコードを書いていきます。
1, APIKitの使い方
基本形はこちらです!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
Session.send(リクエスト) { result in switch result { case .success(let res): // 成功した時の処理 case .failure(let err): // 失敗した時の処理 } } |
APIKitを使う上で大切なことはこの基本の形をできる限り崩さないことです。
Session.send
Session.sendというAPIKitの便利メソッドあるので、基本的にガンガン使っていきます!
このメソッドの引数にリクエストを入れます。
リクエストとはhttpリクエストのことです。
- どのURLに対して、
- どのメソッドで、
- パラメータはこんな感じで、
などなどですね。
この辺は少しWeb系の勉強をしないとピンとこないかもしれませんね、、、
result
resultはリクエストを送った結果です。
resultには「成功・失敗」「json形式のデータ」などが入っています。
それを、成功(success)か失敗(failure)によって処理をわけて記述します。
2, 実際のコード
今回は受け取ったデータをprintするだけにします。
Session.sendの引数に入れるリクエストはまだ作成していないのでひとまず空にしておいてください。
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 31 32 33 34 35 36 |
import UIKit import APIKit class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() Session.send("まだ空") { result in switch result { case .success(let res): print("成功\(res)") case .failure(let err): print("しくった\(err)") } } } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() } } |
3, リクエストのコード
Request.swiftというファイルを作成してください。
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 31 32 33 34 35 36 37 38 39 40 41 |
import APIKit protocol GitHubRequest: Request { } extension GitHubRequest { var baseURL: URL { return URL(string: "https://api.github.com")! } } struct FetchRepositoryRequest: GitHubRequest { var userName: String var path: String { return "/users/\(userName)/repos" } typealias Response = [Any] var method: HTTPMethod { return .get } func response(from object: Any, urlResponse: HTTPURLResponse) throws -> FetchRepositoryRequest.Response { return [object] } } |
上から順番にいきます。
protocol GitHubRequest: Request {}
APIKitが持っているRequestプロトコルに準拠したGitHubRequestを作成しました。
extension GitHubRequest {}
上で作成したGitHubRequestをプロトコルエクステンションで
デフォルトのbaseURLを設定します。
今回はGithubのAPIを利用していきます。
FetchRepositoryRequest: GitHubRequest {}
ここではいわゆるエンドポイントを設定しています。
GitHubRequestとFetchRepositoryRequestを分けているのがとても大切です。
baseURLをもつGitHubRequestを準拠する形にすることで、
複数のエンドポイントを用意する場合に楽になります。(今回は1つしかエンドポイントを用意しないため、メリットはあまりないです。。。)
path
今回は「特定のUserの持っているリポジトリの情報を取得する」というエンドポイントを設定するため、
pathは/users/\(userName)/repos になります。
なので、userNameを入れるプロパティも必要ですね。
typealias
typealias Response = [Any] の部分は今度別の記事を書きたいと思います。
とりあえず、Responseの型を[Any]にしているということです。
httpMethod
GETに指定します。
func response
そして最後にリクエストの結果のレスポンスを受け取って、jsonのデータをデコードしたりする部分です。(今回はprintするだけなのでデコードしません)
大切なのは、typealiasで指定した型を返り値の型に使用して、しっかりとreturnする値を合わせることです。
これでリクエストが完成しました。
Session.sendを完成させる
先ほどviewDidLoad内に記述したSession.sendの引数を空っぽにしていたのでリクエストを格納したいと思います。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
Session.send(FetchRepositoryRequest(userName: "sasao")) { result in switch result { case .success(let res): print("成功\(res)") case .failure(let err): print("しくった\(err)") } } |
これで完成です!
“sasao”の部分には適当な名前を入れてください。
Githubのアカウントをお持ちの方はご自身のアカウント名を入れてみてください。
これで実行すると、デバックエリアにjsonのデータが出力されます!!
次回:「APIKitとHimotokiは仲良し!」