2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

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

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

关注

评论

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

每日一R「10」数据结构(一)智能指针

Samson

8月日更 ​Rust

云签约,云培训,云办公,云指挥… 欧冶工业品,用数字化赋能企业

sofiya

华为云主机安全助力企业种出“金葫芦”

IT资讯搬运工

华为云桌面说“流畅”的时候,究竟在说什么

科技云未来

华为云桌面说“高清”的时候,究竟在说什么

科技云未来

RocketMQ高可用设计之异步刷盘

急需上岸的小谢

8月月更

政企视频会议首选,华为云OneMeeting全场景视频会议解决方案正式发布

sofiya

3000人无缝连接,WeLink助力华荣科技全场景数字化办公

神奇视野

游族马寅龙:常见信息安全风险及应对方案

RTE开发者社区

网络安全 创业讲堂

让视频会议更简单,华为云会议SmartRooms一站全搞定

sofiya

网红50万卖微信号被判交易无效:如何监管互联网账号交易市场

石头IT视角

AIRIOT答疑第9期|AIRIOT平台服务于哪些客户?

AIRIOT

低代码 物联网 低代码,项目开发

华为云会议智能会议室助力财通证券加速数字化

科技怪咖

2022 Gartner RPA魔力象限,弘玑Cyclone位置飞跃国产RPA进击全球

王吉伟频道

RPA 机器人流程自动化 Gartner RPA魔力象限 弘玑Cyclone

沟通不受限,审批不堆积 深大智能通过华为云WeLink+OA实现办公提速

神奇视野

用户权限-Linux系统用户管理

Albert Edison

Linux centos 运维 用户权限 8月月更

Kubernetes Nginx配置热加载

CTO技术共享

开源 签约计划第三季

Kubernetes服务的注册与发现

CTO技术共享

签约计划第三季

2022各互联网大厂面经及总结+大厂Java岗面试真题解析(进大厂必看攻略)

程序知音

Java 程序员 Java 面试 后端技术 八股文

华为发布IdeaHub S2系列,与华为云会议结合更强大!

科技怪咖

ITIL服务支持5个运营级流程简单介绍

阿泽🧸

ITIL 8月月更

IPv6中的隧道技术

穿过生命散发芬芳

ipv6 8月月更 隧道技术

企业搭建知识库的重要性,你了解多少?

Geek_da0866

沉浸感拉满!这样的电影杀约起来

科技云未来

微信小程序开发速览

乌龟哥哥

8月月更

华为云会议,用高效联接推进工业企业数字化转型

sofiya

头脑风暴:最长重复子数组

HelloWorld杰少

时尚品牌玛丝菲尔,选择华为云会议的3个理由

sofiya

如何用紧凑型语音表征打造高性能语音合成系统

小红书技术REDtech

深度学习 语音合成 自编码器 表征学习 语音表征

创建知识库使您的客户能够体验自助服务

Geek_da0866

Kubernetes 核心组件

CTO技术共享

开源 签约计划第三季

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