Play 2.0 中文资料 - Play WS API

有时候我们要在 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 方法。

进行 HTTP 调用

要发送一个 HTTP 请求你要从 WS.url() 指定一个 URL 开始. 然后你得到一个构建器,你能用它指定各种 HTTP 选项, 像设置请求头之类的. 最后根据你要的 HTTP method 调用相应的方法,至此一个 HTTP 调用结束. 例如:

或者:

获取 HTTP 响应结果

调用是异步的, 返回类型是 Promise[ws.Response], 你必须操作它来得到实际的内容. 你可以组成多个 Promise,最后形成一个 Promise[Result],它可由 Play 服务器直接处理:

Post url-form-encoded 数据

欲 post url-form-encoded 数据,需要构造出一个 Map[String, Seq[String]],然后传递给 post() 方法

本文链接 https://yanbin.blog/play2-0-tutorials-cn-ws-api/, 来自 隔叶黄莺 Yanbin Blog

[版权声明] Creative Commons License 本文采用 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 进行许可。

Subscribe
Notify of
guest

0 Comments
Inline Feedbacks
View all comments