このエントリはPlay frameworkひとりアドベントカレンダーの14日目です。
最近はOAuthやらなにやらで外部URLを呼び出すことが多いですよね。
というわけでその方法を紹介します。
同期呼び出し
public static Result sync() {
String url = "http://example.com/api";
Promise response = play.libs.WS.url(url).get();
return ok(response.get().asJson());
}
あらま!簡単!
非同期呼び出し
Play frameworkは非同期I/Oが使えるのがウリ。せっかくだから使いましょう。
ただし非同期I/Oは Netty
ががんばってるところなので、warにしてTomcatにデプロイしたりすると意味ない感じになってしまうようです。
※認識間違ってたら教えてください
public static Result async() {
String url = "http://example.com/api";
return async(play.libs.WS
.url(url)
.get()
.map(new play.libs.F.Function() {
public play.mvc.Result apply(play.libs.WS.Response response) {
return ok(response.asJson());
}
}));
}
あらま!(文法は)簡単!
callbackな書き方になるので、そのへんは頭を切り替えて書きましょう。
code template
↑の非同期呼び出しを暗記するのも刺身たんぽぽです。
Editor > Template で、下記をテンプレートと設定しておきましょう。
return async(play.libs.WS
.url(${var:url})
.get()
.map(new play.libs.F.Function() {
public play.mvc.Result apply(play.libs.WS.Response response) {
return TODO;
}
}));
https://gist.github.com/3962597
Playっぽくなってきましたね!