表記の通り、twitterが作ってるFinagleというwebフレームワークのfinchというのを試してみました(とはいっても、まだgetting started)。
このライブラリーを知ったのは吉田さんのブログエントリー
Playフレームワークをいろいろといじっている最中だったのだけど、Slickのあれで意識が薄れてしまったので(あまり集中力がない)、Playに戻るのもあれだなぁと思っていた所で、ドキュメントがしっかりしていそうだから、finchをやってみることにしました。
とりあえず、本当のgetting started状態なので、ドキュメント
に書いてある内容をApp
クラスを継承したオブジェクトに書いていっただけ。
package com.example import com.twitter.finagle.Httpx import com.twitter.util.Await import io.finch.request._ import io.finch.route._ object WebApp extends App { // getパラメーター title を取得する val title: RequestReader[String] = paramOption("title").withDefault("") // ルーティングの設定 GET http://localhost:8081/hi/name // あるいは GET http://localhost:8081/hello/name // に来たリクエストをさばく val api: Router[String] = get(("hello" | "hi") / string ? title) {(name: String, title: String) => s"Hello, $title ${name}!" } // サーバーを起動 Await.ready(Httpx.serve(":8081", api.toService)) }
これだけで、ひとつのapiが完成です。
$curl -X GET http://localhost:8081/hi/Finch?title=Finagle Hello, Finagle Finch!
$ curl -X GET http://localhost:8081/hello/Valmer Hello, Valmer!
$ curl -v -X GET http://localhost:8081/hi * Trying ::1... * Connected to localhost (::1) port 8081 (#0) > GET /hi HTTP/1.1 > Host: localhost:8081 > User-Agent: curl/7.43.0 > Accept: */* > < HTTP/1.1 404 Not Found < Content-Length: 0 < * Connection #0 to host localhost left intact
ドキュメントが間違っている部分
一箇所だけ、ドキュメントが間違っていました。
The following code serves the given API endpoint with Finagle's Http codec.
Await.ready(Http.serve(":8081", api.toService))
これをそのまま写すと、コンパイルエラーになっていました。
正しくは com.twitter.finagle.Httpx
を用います。
つづく(のか?)