Post on 16-Mar-2018
Naoto Kaneko
Modular API Client
2016/08/17 Kyobashi.swift #2
通信まわりは煩雑•リクエストの送受信、およびエラーハンドリング
• リクエストのシリアライズ、レスポンスのデシリアライズ
• アクセストークンをヘッダーに付与、期限切れの場合はリフレッシュトークンで再発行
• ネットワークインジケータのオン/オフ
• 二重送信の防止
• ロギング
• パフォーマンス計測
• etc…
どこに実装するか• APIClient.swift
• .+ViewController.swift
どこに実装するか• APIClient.swift→責任過多
• .+ViewController.swift→コードの重複、肥大化
Modular API Client• 複数の「一つのことをうまくやる」オブジェクトから構成されるAPIクライアント
• 機能を追加しやすい
• テストしやすい
Modular API ClientRequest Response
API ClientRequest Response
API Client
Middleware 3
Middleware 2
Middleware 1
Request Response
API Client
Middleware 3
Middleware 2
Middleware 1
Request Response
API Client
Middleware 3
Middleware 2
Middleware 1
Request Response
Middleware 1 → 2 → 3 → API Client → 3 → 2 → 1
• 初期化がやや冗長な書き方になってしまう
• 必要なミドルウェアのセットはだいたい同じ
• ミドルウェアのセットにアクセスできない
• ミドルウェアのセットをスタックとして扱う
• デフォルトで必要なスタックを初期化できるようにして簡潔化
まとめ•通信まわりの処理は煩雑→各処理をミドルウェアとして実装することでAPIクライアントを小さく保つ
• 小さいミドルウェア群からAPIクライアントを構築するのが面倒→スタックに束ねることで簡単かつ柔軟に初期化できるようにする
詳細はこちらhttp://naoty.hatenablog.com/entry/
2016/07/14/110000