Swift

Swift: APIKitの超簡単な使用方法


有名ライブラリ、「APIKit」の超簡単な導入を説明します。

注:初心者向けかつ、実践的ではありません。

 

APIKitとは

APIKitはhttpクライアントライブラリです。

jsonをデコードしてくれるHimotokiというライブラリとセットで使用することが多いです。

 

httpクライアントといってもイメージできないかもしれません。

ざっくりいうとwebサーバーとやりとりをする場合に使用します。

Twitterの場合

  • ツイートを取得する
  • いいねを登録する場合
  • etc

つまり、ほとんどのアプリで必要なものになります。

逆に必要のないアプリは、シンプルな「メモ帳」などの自分のスマホ内で完結するようなものは必要ありません。

 

似たような役割のライブラリにAlamofireがあります。

こちらの方が有名かもしれないですね。

 

導入

まずはAPIKitの導入方法を説明していきます。

 

ターミナルでこちらのコマンドを打ってください。

こちらでpodfileを作成してくれます。

pod init

 

podfileを編集

podfileって何??という方はこちらです。

swift3:『Cocoapods』の導入方法!

 

podfileに

pod ‘APIKit’

という記述を

target ‘プロジェクト名’ do

end

の間に記述してください。

# 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をインストールします。

pod install

インストールが完了したら

実際にコードを書いていきます。

 

1, APIKitの使い方

基本形はこちらです!

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の引数に入れるリクエストはまだ作成していないのでひとまず空にしておいてください。

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というファイルを作成してください。

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の引数を空っぽにしていたのでリクエストを格納したいと思います。

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は仲良し!」


ABOUT ME
ささお
3年目iOSエンジニア。 スタートアップで働いておりやす。 プログラミングスクールとエンジニアのキャリアを考えたい。 作ったアプリ - https://apps.apple.com/us/app/loverprofile/id1463563845?l=ja&ls=1