Play frameworkで外部URLを呼び出す

このエントリは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っぽくなってきましたね!


See also