写点什么

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:412079
用户头像

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

关注

评论

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

前端小白躺平摆烂可以吗

Liam

前端 前端开发 前端面试 Mock 前端入门

官宣!华为云GaussDB两大数据库通过中国信通院多项评测

科技怪咖

华为云发布《云原生2.0架构白皮书》,GaussDB技术再升级

sofiya

defi质押挖矿dapp系统开发智能合约部署详解

开发微hkkf5566

数字藏品系统开发:NFT系统开发

开源直播系统源码

数字藏品 数字藏品软件开发 数字藏品源码出售 数字藏品开发

中大型现代服务行业的ERP,Telework现代服务中台

sofiya

基于KubeEdge的边缘节点分组管理设计与实现

华为云开发者联盟

云计算 云原生 后端

字节跳动端智能工程链路 Pitaya 的架构设计

字节跳动终端技术

机器学习 客户端 端智能 Python. Pitaya

面试官:你知道MySQL和Linux操作系统是如何改进LRU算法的吗?

程序员小毕

Java MySQL 程序员 面试 LRU

设计模式的艺术 第五章工厂方法设计模式练习(设计一个程序来读取各种不同类型的图片格式,针对每种格式都设计一个图片读取器)

代廉洁

设计模式的艺术

教育部“产学合作协同育人”项目华为云GaussDB项目入选名单公布

sofiya

快手能做好ToB吗?

ToB行业头条

tob 快手

软件测试 | 测试开发 | 常见接口协议解析

测吧(北京)科技有限公司

TCP/IP

Databend SQL Planner 全新设计

Databend

sql 大数据 开源 #开源 databend

软件测试 | 测试开发 | 一文带你了解K8S容器编排(上)

测吧(北京)科技有限公司

k8s

融云超级群的「同城社交平台」应用实践

融云 RongCloud

社交网络

演讲实录|吴亚昆:云时代智能运维与可观测性探索

观测云

MobTech短信验证 Android端快速集成

MobTech袤博科技

android android-studio 短信验证

【Django | 开发】 (国际化项目&支持多语言)

计算机魔术师

8月月更

【微信小程序开发】自定义tabBar案例(定制消息99+小红心)

计算机魔术师

8月月更

【小程序项目开发-- 京东商城】uni-app之商品列表页面 (下)

计算机魔术师

8月月更

软件测试 | 测试开发 | 接口测试 Mock 实战(二) | 结合 jq 完成批量化的手工 Mock

测吧(北京)科技有限公司

Mock

长安链源码分析启动(7)

长安链

创新技术领航者!华为云GaussDB获颁2022年云原生数据库领域权威奖项

科技云未来

如何为开源项目撰写 RFC

Databend

大数据 开源 #开源 databend

华为云发布业界首个《云原生数据库白皮书》 重新定义数据新范式

科技怪咖

华为云GaussDB(for Redis)揭秘:谁说Redis不能存大key

科技怪咖

Python如何用类和对象来编程?

和牛

Python 8月月更

设计模式的艺术 第十六章责任链设计模式练习(提供一个假条审批模块:如果员工请假天数小于3天,主任审批该请假条;如果天数大于或等于3天,小于10天,经理审批;如果天数大于或等于10天,小于30天,总经理审批;如果超过30天,总经理不能审批,提示相应拒绝信息)

代廉洁

设计模式的艺术

Java即时编译(JIT)原理与调优

柠檬汁Code(binbin0325)

JVM JIT 即时编译

使用华为云GaussDB(for Redis)实现二级索引

科技怪咖

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