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 Client
Request Response
API Client
Request 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

Modular API Client