BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース ASP.NET Core と F#で動作するGiraffe

ASP.NET Core と F#で動作するGiraffe

原文(投稿日:2017/10/23)へのリンク

Giraffeは、F#でWebアプリケーションを構築できるマイクロフレームワークである。Webフレームワーク向けのF# APIを提供し、ASP.NET Core上で動作する。Giraffeは、F#でWebアプリケーションを構築したい開発者に対して、ASP.NET Coreとそのエコシステムを活かすことができる。

Giraffeの構文は、人気のあるF#WebフレームワークのSuaveと似ている。これらが似ていることにより、2つのフレームワークを統合するか、APIセットを共有してはどうかという提案も出された。Giraffeの開発者は、この統合があまり価値がないと思う理由を以下のように説明している。:

GiraffeとSuaveの主な違いのひとつは、Giraffeの基本的な方針がASP.NET Coreと密接に統合していることです。関数型言語を好む.NET開発者が、ASP.NET CoreのWebアプリケーションを関数型言語で構築したいというニッチを埋めるためにGiraffeは生まれました。Giraffeは、ASP.NET Core上に薄いレイヤーを提供し、ASP.NET Coreの主要なビルディングブロック(DI、HttpRequest、HttpResponse、Configなど)を保持することで、このニッチを埋めています。これにより、F#開発者は既に存在する(今後登場する)ASP.NET Coreエコシステムを多数使用することができます。

Giraffeの主要なビルディングブロックはHttpHandlerだ。HttpHandlerは、IApplicationBuilderを使用したASP.NET Coreと同様のパイプラインだ。ハンドラは、次のハンドラを呼び出してパイプライン処理を継続できる。

type HttpHandler = HttpFunc -> HttpContext -> HttpFuncResult

Giraffeは、HttpHandlerを統合して高いレベルで抽象化を行い、最終的にアプリケーションを作成するコンビネータ的なアプローチを行う。

let webApp =
choose [
route “/foo” >=> text “Foo”
route “/bar” >=> text “Bar”
]

type Startup() =
member __.Configure (app : IApplicationBuilder)
                    (env : IHostingEnvironment)
                    (loggerFactory : ILoggerFactory) =
    app.UseGiraffe webApp

GiraffeはF#の非同期ワークフローの代わりに.NET Task を使用する(この2つの実装が異なり相互変換する必要があるため)。 Giraffeは、オーバーヘッドを減らすよう変換を最小限に抑える。

let personHandler =
    fun (next : HttpFunc) (ctx : HttpContext) ->
        task {
            let! person = ctx.BindModel<Person>()
            return! json person next ctx
        }

サンプルアプリケーションがGitHubで利用できる。

 
 

Rate this Article

Adoption Stage
Style
 
 

この記事に星をつける

おすすめ度
スタイル

BT