たまたまChangeLogを読んだので、気になったポイントを紹介します。
Package名を変更した
3系になってcom.squareup.okhttpからokhttp3に変更されています。理由はJakeのブログに詳しく書かれていますが、要約すると、2系のコードと共存出来るようにすることで、部分的/段階的に3系のコードを取り入れることを可能にして、バージョンアップの負担を減らすことが目的のようです。
グローバルなconnection poolの仕組みがなくなった
2系は全てのOkHttpClientのインスタンスがグローバルなコネクションプールを共有していたらしいのですが(知らなかった...
)、それがなくなりました。 そのため、3系では一つのOkHttpClientインスタンスをアプリケーション全体で使いまわすことが薦められています。
OkHttpClientが不変になった
2系のOkHttpClientはgetter/setterがあったため、途中で設定の変更が可能でした。このため内部ではリクエストを行う度にOkHttpClientのスナップショット(クローン)を生成していましたが、3系ではビルダーによって設定を記述し、不変なインスタンスを生成する方針に変更されました。(厳密にはコネクションプールやキャッシュなど不変でないものも含まれます)
OkHttpClientがCall.Factory interfaceを継承するようになった
これによりテストが容易になるそうです。
java.net.CookieHandlerの利用をやめた
CookieJar interfaceとCookieモデルに置き換えられました。これにより最新のRFCの仕様で定義されている属性を利用出来るようになったらしいです。
FormやMultipartまわりが新しくなった
FormEncodingBuilderがFormBodyとFormBody.Builderに、MultipartBuilderがMultipartBodyとMultipartBody.PartとMultipartBody.Builderに置き換わり更に機能が強力になったとのことです。
Tagでリクエストを一括キャンセルする仕組みがなくなった
今までは、Requestインスタンスに設定したtagによってリクエストを一括キャンセルする方法がありましたが廃止になりました。その代わりにDispatcherにqueuedCalls,runningCallsというメソッドが生えたので、直接Callインスタンスを受け取って、自分でCall#cancelをコールしてくださいとのことです。
getXXXとかsetXXXとか書くの辞めた
たしかにコード見るとget-prefixやset-prefixがないです。(Jakeがkotlinハマってる影響ですかね..)
かなり適当な訳なので、詳細はChangeLogをご確認下さい。
紹介しなかった変更点もいくつかあります。