ドキュメント

§Play WS移行ガイド

Play WSには、スタンドアロン版 - https://github.com/playframework/play-ws - があり、Playプロジェクト以外でも使用できます。Play sbtプロジェクトを使用している場合は、次の行をbuild.sbtに追加することでWSを追加できます。

libraryDependencies += ws

これには、Playの依存性注入バインディングおよびコンポーネント、構成、およびより適切に統合するために必要なその他すべてを備えたスタンドアロンバージョンをラップするplay-ahc-wsモジュールが含まれます。

また、キャッシュサポートを使用する場合は、wsehcacheを追加し、キャッシュを有効にして設定する必要があります。

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つのライブラリ、wsplayWsで構成されており、それぞれが舞台裏で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()を呼び出す必要があります。

次へ: キャッシュの移行


このドキュメントにエラーがありましたか?このページのソースコードはこちらにあります。 ドキュメントガイドラインを読んだ後、自由にプルリクエストを送信してください。質問や共有するアドバイスはありますか?コミュニティフォーラムにアクセスして、コミュニティと会話を開始してください。