写点什么

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

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

关注

评论

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

面试官:怎么保证Kafka的消息不丢失

Java kafka 面试 消息队列 消息中间件

等保和网络安全法的关系是什么?怎么理解?

行云管家

网络安全 等保 等级保护

分解GameFi链游游戏软件系统如何开发?

Congge420

【技术】多端能力服务统一是一种关键的技术和架构

没有用户名丶

透明LED显示屏与常规屏的区别

Dylan

LCD1602液晶显示屏 显示器 LED显示屏

NFTScan 正式发布 Bitcoin NFT 浏览器,支持 Ordinals NFT 和 BRC20 资产

NFT Research

Bitcoin NFT\

又爆神作!阿里首发并发编程神仙笔记,差距不止一点点

Java 并发编程

软件测试丨SeleniumIDE 自动化用例录制、测试用例结构分析

测试人

软件测试 自动化测试 测试开发 测试用例 selenium

开源赋能 普惠未来|XuperCore诚邀您参与2023开放原子全球开源峰会

开放原子开源基金会

开源

Apache Hudi 在袋鼠云数据湖平台的设计与实践

袋鼠云数栈

数据湖 Hudi Apache Hudi

发挥数据价值!数据驱动的日志解析与异常检测方法介绍!

嘉为蓝鲸

日志分析 管理日志 日志统计

浅谈NFT盲盒游戏系统开发原理

Congge420

实例解读华为云数字工厂平台的逻辑模型编排器

华为云开发者联盟

数据库 后端 华为云 华为云开发者联盟 企业号 5 月 PK 榜

嘉为蓝鲸DevOps流水线工具如何为企业研发赋能?

嘉为蓝鲸

DevOps 流水线 蓝鲸

【云计算】谷歌云是国外的吗?是公有云还是私有云?

行云管家

公有云 私有云 谷歌云

Python从0到1丨了解图像形态学运算中腐蚀和膨胀

华为云开发者联盟

Python 人工智能 华为云 华为云开发者联盟 企业号 5 月 PK 榜

嘉为蓝鲸CMP多云管理平台解决方案成功入选!

嘉为蓝鲸

多云管理 IT运维 蓝鲸

JMeter笔记8 | JMeter关联

测试 Jmeter 性能测试 自动化测试 接口测试

ChatGPT聊天系统开发基于GPT-3.5架构

Congge420

SpringBoot 中实现定时任务的几种方式

Java Spring Boot

开源赋能 普惠未来|铜锁/Tongsuo诚邀您参与2023开放原子全球开源峰会

开放原子开源基金会

开源

零信任之访问代理

Flomesh

Pipy

理解JVM工作机制(二) 对象的创建

Geek漫游指南

Java JVM Java web

理解JVM工作机制(三)对象的内存布局

Geek漫游指南

Java JVM

实力上榜!ONES 荣获深圳市「专精特新」企业认定

万事ONES

火山引擎多云安全平台,破解多云异构场景下的安全挑战

科技热闻

JMeter笔记7 | JMeter脚本回放

测试 Jmeter 性能测试 自动化测试 接口测试

开发者福利来了 | 京东云全系核心产品公开比价:我们承诺,买贵就赔!

京东科技开发者

数据库 云主机 京东云 云主机厂商 企业号 5 月 PK 榜

火山引擎DataLeap联合DataFun发布《数据治理知识地图》

字节跳动数据平台

数据治理 数据开发 数据库开发 数据研发

GitHub上13个高赞Java项目推荐,会一个就能跟面试官谈笑风生

Java你猿哥

Java 微服务 秒杀系统 网约车项目 java项目

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