写点什么

Giraffe:在 Web 开发中使用 F#和 ASP.NET Core

  • 2017-10-30
  • 本文字数:931 字

    阅读完需:约 3 分钟

Giraffe 是一种用于构建 Web 应用的微型 F# Web 框架。它基于 ASP.NET Core,为 Web 框架提供了 F# API。Giraffe 支持开发人员在使用 F#构建 Web 应用的同时,还可以访问 ASP.NET Core 及其生态系统所提供的特性。

Giraffe 的语法类似于另一种广为使用的 Web 框架 Suave 。两者间相似性为我们提出了一个问题:两种框架是否应该合二为一,或是应该遵循同一套 API。Giraffe 的创立者阐述了他认为合并不能产生增值的理由

正如人们经常提及的,Giraffe 的根本出发点在于提供与ASP.NET Core 的紧密集成,这是Giraffw 和Suave 间的一个主要差异所在。我们注意到,在使用功能性.NET 开发构建功能性ASP.NET Core Web 应用上存在着利基空间。Giraffe 的推出正是力图填补这一空缺。它在ASP.NET Core 之上构建了一个轻量级功能层,同时依然保持DI、HttpRequest、HttpResponse、Config 等ASP.NET Core 构建块可用。这使得F#开发人员可以使用已有的(或是即将推出的)许多ASP.NET Core 生态系统。

Giraffe 的主要构件是 HttpHandler。HttpHandler 提供了一种函数流水线,它类似于通过 IApplicationBuilder 组合使用 ASP.NET Core。一个 Handler 可以通过调用随后的 Handler,继续流水线的处理。例如:

type HttpHandler = HttpFunc -> HttpContext -> HttpFuncResultGiraffe 使用了组合(Combinator)方法。开发人员可以通过将 HttpHandlers 组合在一起创建更高层级的抽象,最终创建一个应用。例如:

复制代码
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 中使用的是.NET 的Task对象,而非异步(async)工作流。这两种实现是不同的,需要做相互转化。Giraffe 通过最小化这种转化,降低了开销。

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

例子应用提供在GitHub 上。

查看英文原文: ASP.NET Core and F# with Giraffe

2017-10-30 18:411725
用户头像

发布了 391 篇内容, 共 143.8 次阅读, 收获喜欢 257 次。

关注

评论

发布
暂无评论
发现更多内容

未来已来,运营商如何驱动区块链应用创新提速?

CECBC

区块链将规则写入代码 重构市场新制度

CECBC

人工智能解决方案 --- 智能运维(AIOps)

micklongen

人工智能 AIOPS 知识图谱 智能运维 数据工程

018云原生之基础架构

穿过生命散发芬芳

云原生 10月月更

网络安全漏洞深度剖析

网络安全学海

网络安全 信息安全 渗透测试 WEB安全 安全漏洞

Large Scale Distributed Deep Networks论文记录

春秋易简

IPFS云矿机分币软件系统开发简介(源码)

redis--多机

en

redis 高可用

Minio环境搭建

Fox666

Minio 分布式文件存储

linux【redhat&ubuntu】下ffmpeg-3.1安装编译及视频转码

程序员架构进阶

架构 ffmpeg 视频流 10月月更

现成filecoin算力挖矿软件系统开发公司

fil挖矿分币系统开发资料(案例)

手机影像二十载,AI多摄会是终极答案吗?

脑极体

filecoin矿机分币系统开发方案(现成)

站立会(Daily Scrum)我们说些什么

Bruce Talk

Scrum 敏捷 Agile Coach/Facilitate

FIL云算力分币软件系统开发内容(源码)

微信小程序获取用户授权的思路

Changing Lin

10月月更

Java容器学习二

风翱

Java 10月月更

Go应用场景与适应项目

hanaper

丰收音乐会,去找美丽却隐秘的生机

E科讯

小红书爆款笔记如何写,掌握3种类型的笔记写法

石头IT视角

趣说 Node.js 的事件循环

Regan Yue

node.js Regan Yue 10月月更

IPFS分币挖矿系统软件开发资料(现成)

现成IPFS分布式存储矿机软件系统开发案例

Java 面试八股文之数据库篇(一)

Dobbykim

分布式文件存储系统Minio实战

Fox666

Minio 分布式文件存储

博鳌亚洲论坛国际科技与创新论坛第二届大会区块链分论坛紧密筹备中

时空云

区块链 博鳌 亚洲论坛

IPFS算力挖矿系统开发方案(源码案例)

越来越被需要的售前工程师·「这就是售前」前言

jiezhao

售前 企业服务

跳槽时需要注意的事项

石云升

跳槽 职场经验 10月月更

央行数字货币即将破茧,一场大变局,震撼全球

CECBC

Giraffe:在Web开发中使用F#和ASP.NET Core_.NET_Pierre-Luc Maheu_InfoQ精选文章