たまたま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をご確認下さい。 紹介しなかった変更点もいくつかあります。