Ishikawaメルカリで働くiOSエンジニアです。APIKitというSwiftの言語機能を活かしたネットワークライブラリの開発者でもあります。最近は川遊びに夢中になっています。2015で紹介された新しいプログラミングのコンセプトです。Programmingがなぜネットワーキングに適しているのか、また、型安全性やコードのシンプルさにどのように貢献するのか説明します。実際のアプリケーション開発で使えるような実例や、RxSwiftと組み合わせた発展的な実例についても紹介します。2016ネットワーキングにおけるPOPNSURLSessionをプロトコルでラップするコールサイトのコードをシンプルに、レスポンスをタイプセーフに右の形にラップします。右の図ではSessionの中に5ステップが入ります。リクエストをプロトコルにすることでレスポンスがリクエストに紐づく。指で刺した部分がポイント例を示します。イシュー作成とリポジトリ検索。リクエストの方さえ指定すればレスポンスの方が自動的に決定し、型安全にレスポンスが取得できるようになる。プロトコルを使うことがこの設計に適しているのでしょう。ひとつ目の理由は、リクエストとレスポンスを紐付けられるからです。指の2箇所で紐付けられています。ひとつ目の指:リクエストの方の中にResponseという名前の型が存在します。プロトコル上でリクエストとレスポンスのひも付けが可能に。ふたつ目の指:レスポンスがリクエストによって変わりますSessionのSendRequestのところで利用されます。ResponseFromObjectが利用されているので、Resultがリクエストごとに違う方を返します。この結果が、リクエストに応じてレスポンスの型が変わるということです。ふたつ目の理由デフォルト実装をフレキシブルに実装できるGithubRequestプロトコルを提供している。GithubのベースURLはいつも同じなのでデフォルト値を設定している。デフォルト実装で準拠する型の実装ハードルも下がる。arrayにダウンキャストしてRepositoryの型にインスタンス化する。これをリクエストごとにこれを実装するのは大変。通してオブジェクトを取り出します。プロトコルに準拠していればdecodeをよべる。型制約つきExtensionを使う。デフォルト実装を提供できました。ここまでで、一つ一つのリクエストの定義はこのコードのようになります。WebAPIのドキュメントと同じ情報量。プロトコルのフレキシブルなデフォルト実装のおかげでシンプルに出来た。設計についてだけ述べましたが実装した物があります。APIKitはNSURLSession、HimotokiはdecodeTopic2ページングなどの制約をプロトコルで表す。付いていますページ情報を持ち、ページ指定をするメソッドを用意。PaginationResponseTypeに準拠することを宣言。