§Play WS移行ガイド
Play WSには、スタンドアロン版 - https://github.com/playframework/play-ws - があり、Playプロジェクト以外でも使用できます。Play sbtプロジェクトを使用している場合は、次の行をbuild.sbt
に追加することでWSを追加できます。
libraryDependencies += ws
これには、Playの依存性注入バインディングおよびコンポーネント、構成、およびより適切に統合するために必要なその他すべてを備えたスタンドアロンバージョンをラップするplay-ahc-ws
モジュールが含まれます。
また、キャッシュサポートを使用する場合は、ws
、ehcache
を追加し、キャッシュを有効にして設定する必要があります。
libraryDependencies += ws
libraryDependencies += ehcache
Play以外のプロジェクトで使用する場合は、次のコマンドでsbtプロジェクトに追加できます。
libraryDependencies += "com.typesafe.play" %% "play-ahc-ws-standalone" % "1.0.1"
libraryDependencies += "com.typesafe.play" %% "play-ws-standalone-json" % "1.0.1"
libraryDependencies += "com.typesafe.play" %% "play-ws-standalone-xml" % "1.0.1"
§パッケージの変更
Play WSは、これまで、ScalaとJavaのAPIを含む2つのライブラリ、ws
とplayWs
で構成されており、それぞれが舞台裏でAsyncHTTPClientを個別に作成していました。現在では、ScalaとJavaのWSClient
インスタンスの両方を含み、両方ともシングルトンのAsyncHttpClient
プロバイダーを指す、1つのplay-ahc-ws
ライブラリのみが存在します。
§プロジェクトの変更
Play WSは、Playクラスに依存せず、AsyncHttpClient、Signpost、およびNetty 4.0のパッケージ名が変更された「shaded」バージョンを使用する、スタンドアロンのWSライブラリの上にPlay固有のラッパーとして存在します。
スタンドアロンのWSバージョンを提供し、シェード付きライブラリを使用することにより、WSはより柔軟になり、他のライブラリやプロジェクトとの競合が少なくなります。
Play WS APIは、Playでのみ使用可能なHttp.Multipart
およびMultipart
タイプを使用して、スタンドアロンWSのpost
を拡張します。例:
def withBody(body: Source[MultipartFormData.Part[Source[ByteString, _]], _]): Self
Signpost OAuthは、Commons HTTPClient OAuthProviderを使用する代わりに、内部でHTTPURLConnectionを使用するDefaultOAuthProviderを使用するように変更されました。
§APIの変更
§Scala
WSAPI
クラスが削除されました。WSClient
インターフェイスは、WS APIのエントリポイントです。
WSRequest
には、withBody[T](body: T)(implicit writable: play.api.http.Writable[T])
メソッドがありましたが、Writable
の動作を追跡するのが困難であったため、置き換えられました。現在では、同じ機能を果たすカスタムのBodyWritable[T]
型クラスがあり、スタンドアロンWSで型クラスインスタンスが定義されています。
override def withBody[T: BodyWritable](body: T)
非推奨のScalaシングルトンオブジェクトplay.api.libs.ws.WS
が削除されました。代わりにWSClient
のインスタンスを使用する必要があります。コンパイル時依存性注入を使用している場合は、AhcWSComponents
トレイトをミックスインする必要があります。
Guiceの場合、システムで使用できるWSClient
があります。
class MyService @Inject()(ws: WSClient) {
def call(): Unit = {
ws.url("http://localhost:9000/foo").get()
}
}
注入されたWSClientインスタンスを使用できない場合は、独自のWSClientインスタンスを作成することもできますが、クライアントのライフサイクルを管理する必要があります。
機能テストを実行している場合は、スタンドアロンのWSClientインスタンスを起動およびシャットダウンするplay.api.test.WsTestClient
を使用できます。
play.api.test.WsTestClient.withClient { ws =>
ws.url("http://localhost:9000/foo").get()
}
ning
パッケージはahc
パッケージに置き換えられ、Ning*クラスはAHC*に置き換えられました。
StreamedResponse
の代わりに、通常のWSResponse
インスタンスがstream()
から返されます。ストリーミングされた結果を返すには、response.bodyAsSource
を呼び出す必要があります。
play.api.libs.ws.WSRequest
で、より明確にするために非推奨となるいくつかの命名変更があります。これらを移行する際には、特に注意が必要です。
- WsRequest.withHeaders
が、WsRequest.addHttpHeaders
(同じ動作)または WsRequest.withHttpHeaders
(既存のヘッダーを破棄)になりました。
- WsRequest.withQueryString
が、WsRequest.addQueryStringParameters
(同じ動作)または WsRequest.withQueryStringParameters
(既存のクエリ文字列を破棄)になりました。
§Java
Javaでは、play.libs.ws.WS
クラスは非推奨になりました。代わりに注入されたWSClient
インスタンスを使用する必要があります。
public class MyService {
private final WSClient ws;
@Inject
public MyService(WSClient ws) {
this.ws = ws;
}
public void call() {
ws.url("http://localhost:9000/foo").get();
}
}
注入されたWSClientインスタンスを使用できない場合は、独自のWSClientインスタンスを作成することもできますが、クライアントのライフサイクルを管理する必要があります。
機能テストを実行している場合は、スタンドアロンのWSClient
インスタンスを起動およびシャットダウンするplay.test.WsTestClient
を使用できます。
WSClient ws = play.test.WsTestClient.newClient(19001);
...
ws.close();
StreamedResponse
の代わりに、通常のWSResponse
インスタンスがstream()
から返されます。ストリーミングされた結果を返すには、response.getBodyAsSource()
を呼び出す必要があります。
次へ: キャッシュの移行
このドキュメントにエラーがありましたか?このページのソースコードはこちらにあります。 ドキュメントガイドラインを読んだ後、自由にプルリクエストを送信してください。質問や共有するアドバイスはありますか?コミュニティフォーラムにアクセスして、コミュニティと会話を開始してください。