写点什么

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

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

关注

评论

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

TiDB for PostgreSQL 学习指南

TiDB 社区干货传送门

实践案例 管理与运维

【精选实践】58 集团的数据库技术选型思路

TiDB 社区干货传送门

数据库架构选型

TiDB在X86和ARM混合平台下的离线部署和升级

TiDB 社区干货传送门

安装 & 部署

SQLserver迁移TiDB场景的实践

TiDB 社区干货传送门

迁移 管理与运维

社区资源这么丰富我们怎么抄作业

TiDB 社区干货传送门

TiDB 入门运维基础教程(二)--生产环境安装

TiDB 社区干货传送门

安装 & 部署

生产环境 TiDB V5.0.3 集群部署

TiDB 社区干货传送门

实践案例

扩容TIKV节点遇到的坑

TiDB 社区干货传送门

管理与运维

TIDB br 备份 PermissionDenied

TiDB 社区干货传送门

TiDB SQL调优实战——索引问题

TiDB 社区干货传送门

性能调优 实践案例

SQL上线引发的血案

TiDB 社区干货传送门

伴鱼数据库之性能大盘

TiDB 社区干货传送门

TiDB 集群 TiKV 节点内存占用较高问题排查

TiDB 社区干货传送门

故障排查/诊断

TiDB 配置参数修改与系统变量修改步骤

TiDB 社区干货传送门

实践案例

【SOP 系列 19】region 分布不均问题排查及解决不完全指南

TiDB 社区干货传送门

管理与运维

TiDB 集群跨平台在线迁移方案(离线环境下从 x86 节点迁移到 arm64 节点)

TiDB 社区干货传送门

管理与运维

DM 2.0 小试牛刀

TiDB 社区干货传送门

TiDB K8S 定时备份状态异常问题排查

TiDB 社区干货传送门

管理与运维

TiDB 集群跨平台在线迁移方案(离线环境下从 x86 节点迁移到 arm64 节点)

TiDB 社区干货传送门

管理与运维

【TiDB 最佳实践系列】海量 Region 集群调优

TiDB 社区干货传送门

实践案例

TiDB 在 2021 易车 818 汽车狂欢节的应用

TiDB 社区干货传送门

实践案例

使用 TiCDC 实时同步 TiDB 数据到备用逃生环境的实践

TiDB 社区干货传送门

实践案例 安装 & 部署

TiDB K8S 删除备份阻塞问题排查

TiDB 社区干货传送门

TiDB 底层架构 管理与运维

都是空格惹的祸

TiDB 社区干货传送门

从TiDB中学习代码提交规范的重要性

TiDB 社区干货传送门

TiDB 底层架构

【TiDB CPU使用率过高之一】Scheduler worker CPU

TiDB 社区干货传送门

实践案例

干货分享丨携程国际业务动态实时标签处理平台实践

TiDB 社区干货传送门

实践案例

TiDB集群的GC不回收案例(案情二)

TiDB 社区干货传送门

故障排查/诊断

TIDB:分布式事务算法Percolator学习笔记

TiDB 社区干货传送门

TiDB 底层架构

TiDB 对大事务的简单拆分

TiDB 社区干货传送门

性能调优

TiDB和MySQL的锁一些分析比对

TiDB 社区干货传送门

实践案例 TiDB 底层架构

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