1.1 Akka Streams
1.2 Non-blocking I/O
1.3 Reactive Streams
scala
import play.api.libs.ws._
import scala.concurrent.Future
import play.api.libs.ws.ahc._
val wsClient: WSClient = AhcWSClient()
val request: WSRequest = wsClient.url("https://api.example.com/data")
.withQueryStringParameters("param1" -> "value1", "param2" -> "value2")
val response: Future[WSResponse] = request.get()
response.map { res =>
println("Status: " + res.status)
println("Body: " + res.body)
}
scala
play.ws {
timeout.connection = 5000
timeout.idle = 5000
followRedirects = true
userAgent = "MyApp"
}
scala
response.map { res =>
val json: JsValue = res.json
val result: String = (json \ "result").as[String]
println("Result: " + result)
}
scala
class AuthFilter extends WSRequestFilter {
override def apply(executor: WSRequestExecutor): WSRequestExecutor = {
request =>
val modifiedRequest = request.withHttpHeaders(
"Authorization" -> "Bearer <token>"
)
executor(modifiedRequest)
}
}
wsClient.url("https://api.example.com/data")
.withRequestFilter(new AuthFilter)
.get()