.NET向けの新しいウェブ開発ライブラリであるSuave 1.0がリリースされた。Suaveは軽量で非同期のウェブサーバとHTTPを処理するパイプラインを記述するセマンティックなモデルを提供する。SuaveはWindows、OSX、Linux、.NET、Monoなど複数のOS、プラットフォームで動作する。どのような.NET言語からも使えるが、Suaveのコンビネータと型はF#から使われるように設計されている。
Suaveのプログラミングモデルではコンビネータを使い、大きめのファンクションを作成する。SuaveのメンテであるHenrik Feldt氏は、次のように説明する。
コンビネータは高階関数であり、異なる方法で構成され、異なる効果を産み、HTTPレスポンスを生成します。
Suaveは
OK "Hello"
のようなコンビネータやnotFound
のようなコンビネータを持ち、また、低いレベルのHTTPの構成物も提供し、どんな種類のウェブサービスでもプログラミングできます。Suaveでは、関数をWebPart
型を経由して操作します。type WebPart = HttpContext -async<HttpContext option>
で取得できます。
option
型を使うことで、success/failセマンティクスを使えます。また、異なるルートをエンコードすることもできます。We use a function called
choose
という関数は、WebPartsのリストを受け取り、いずれかのWebPartsがSome httpContext
を返すまで、それぞれにHttpContext
を与えます。httpContext
の内部はサーバがクライアントに返す、エンコードされたレスポンスです。
>=>
演算子を使ってWebPartsを構成し、ルーティングをエンコードできます。
下のコードはSuaveを使った"Hello World!"だ。このウェブアプリケーションではすべてのリクエストに対して"Hello World!"を返す。
open Suave
startWebServer defaultConfig (Successful.OK "Hello World!")
次の例では、ルートにマッチしなかった場合、404を返している。
let app : WebApp =
choose[
path "/foo" >=> OK "foo"
path "/bar" >=> OK "bar"
notFound "no handlers found."
]
startWebServer defaultConfig app
Suaveはオープンソース。GitHubにホストされている。ドキュメントやサンプルは公式サイトで確認できる。InfoQではHenrik Feldt氏にインタビューし、Suaveの詳細と使い方について話を聞いた。