読者です 読者をやめる 読者になる 読者になる

HimotokiとAPIKitでAPIクライアント

APIKitとは

GitHub - ishkawa/APIKit: Type-safe networking abstraction layer that associates request type with response type.

Himotokiとは

GitHub - ikesyo/Himotoki: A type-safe JSON decoding library purely written in Swift

単一のモデルをデコード

Requestプロトコル継承したGithubRequestを作成・Extension。

リクエストを生成するためのStructを定義

リクエスト実行

ポイント

通常のAPIKitの使い方では、リクエストを生成するための構造体にresponseメソットを定義する。 しかし、Himotokiを使うことで、responseメソッドの処理もGithubRequestプロトコルをExtensionする形で実装させることができる。 こりによりよりコードがシンプルになる。

コードだけみるとRateLimit構造体のdecodeが呼ばれていないように見えるが、

これのメソッドを呼ぶと内部的にT.decodeを読んでいる。

Himotokiのカスタムオペレータ

Himotokiのdecodeメソッドを見ると<|という謎のメソッドが使われている。これはカスタムオペレータといういうもので、+-といったようなオペレータを独自で定義する方法である。Himotokiのソースコードを見ると以下のように定義されている。

<|の左側に記述したものが上のメソッドの第一引数で右側に記述したものが第2引数となる。

複数のモデルをデコード

以下の例は、Github上のリポジトリーを検索し複数のリポジトリーの情報をレスポンスとして返すようなものである。

先程の例と同様に、typealiasに指定したモデル(今回でいうとRepositoryCollection)のdecodeが内部的に呼ばれる。 さらに、RepositoryCollectionをdecodeする過程で子モデルであるRepositoryモデルのdecodeも呼ばれるので、結果的にモデル配列をdecodeすることができる。

サンプルプロジェクト

github.com