今やスタンドアロンで動くiOSアプリは数少なく、ほとんどのアプリではWebAPIを経由してサーバーと情報のやり取りを行います。アプリの動作の根幹となるAPI通信を適切に設計し、将来の改修や通信/マッピングライブラリの入れ替えなどをより容易にするためのプロトコル指向なAPI定義の仕方と、さらにそれとRxSwiftを組み合わせた型安全なAPI抽象レイヤーの設計について紹介します。また、ここで話す内容をフレームワーク化したAbstractionKitの紹介をします。
Protocol Oriented WebAPI Abstraction
みなさんエンドポイントをどのように書いていますか
BaseURL, Path, レスポンスなど。
API定義が通信フレームワークから独立しているのが良いでしょう。
SwaggerからSwiftコードを自動生成する時に、ネットワークフレームワークと分離したシンプルなコードを出力できます
そこでAbstractionKitをつくりました
JSON構造をGenericで表せます。
一つだけの場合
配列の場合
パース不要の場合(ResultはVoid)
合成されたレスポンスも。タプルで変える。
Response型はResponseDefinitionに準拠していてAssociatedTypeでレスポンスなどを指定する
Articleが返るのがわかる
APIKitのRequestにするために
Singleにするために
上位レイヤーから使うためにラッパーを書く
新しいエンドポイント追加も容易。APIKitに依存する箇所が少なく疎結合。