有时候我们要在 Play 应用中调用其他的 HTTP 服务. Play 是通过它的 play.api.libs.ws.WS
库对此支持的, 该库提供了进行异步的 HTTP 调用.
任何由 play.api.libs.ws.WS
发出的调用都必须返回 Promise[play.api.libs.ws.Response],
我们可以接着可用 Play 的异步机制来处理它.
Unmi 注: 这里有必须挪出 Play 1 和 Play 2 的 WS 稍加对比:
Play 1 中 play.libs.WS 类,Play 2 里是 play.api.libs.ws.WS,Play 2 中许多给外部调用的 API 都放在 play.api.libs 包中了。
Play 1 的 play.libs.WS.WSRequest 中有 get():HttpResponse, getAsync():Promise<HttpResponse>, put():HttpResponse, putAsync():Promise<HttpResponse>,它把同步和异步调用分得很清楚。
而 Play 2 的 play.api.libs.ws.WS.WSRequestHolder 里只有 get(): Promise<Response>, post(): Promise<Response> 这样方法,在这个位置上,它不再分同步还是调用,这个任务交给 Async 方法去决定。
对异步请求的数据获仍然是由 Action 处理,如 Play 1 中 Action 的各个 await() 方法; Play 2 里的 Action 用 Async 方法。 阅读全文 >>