写点什么

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

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

关注

评论

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

网站开发进阶(六十四)CSS 属性选择器讲解

No Silver Bullet

CSS 属性选择器 5月月更

mykit-lock之——分布式锁插件正式开源

爱好编程进阶

Java 程序员 后端开发

SpringCloud Alibaba实战二十七 - Oauth2认证服务器自定义异常

爱好编程进阶

Java 程序员 后端开发

[Java基础]Map集合的遍历

爱好编程进阶

Java 程序员 后端开发

[JVM面试]Full GC 到底是如何产生的?如何解决?

爱好编程进阶

Java 程序员 后端开发

Druid连接池源码阅读05

石小天

JDBC访问数据库的一些小技巧

爱好编程进阶

程序员 后端开发

Shiro 权限管理入门之认证与授权

爱好编程进阶

Java 程序员 后端开发

SpringFramework中的注解声明式事务怎么被Shiro搞失效了

爱好编程进阶

Java 程序员 后端开发

k8s client-go源码分析 informer源码分析(3)-Reflector源码分析

良凯尔

容器 云原生 Kubernetes 集群 Client-go

从AI数羊到“相牛”:人工智能应用如何低门槛化?

脑极体

15-操作DOM对象

爱好编程进阶

Java 程序员 后端开发

redis编码及数据结构

爱好编程进阶

Java 程序员 后端开发

Mybatis源码学习(二)缓存和别名处理器

爱好编程进阶

程序员 后端开发

架构训练营毕业设计:电商秒杀系统

AragornYang

架构训练营 架构实战营

架构训练营 毕业总结

AragornYang

架构训练营 架构实战营

MPEG-TS封装格式

Loken

音视频 5月月更

ElasticSearch 概述

爱好编程进阶

Java 程序员 后端开发

Linux宝塔面板命令大全

爱好编程进阶

Java 程序员 后端开发

5分钟学会 Vim 分屏操作方方面面

爱好编程进阶

Java 程序员 后端开发

Java字节流和字符流,是时候总结一下IO流了

爱好编程进阶

程序员 后端开发

Tomcat,Let‘s Go!

爱好编程进阶

程序员 后端开发

架构实战营模块5作业

天琪实刚亮

LeetCode - 1629 -按键持续时间最长的键 - Java - 细喔

爱好编程进阶

Java 程序员 后端开发

有了测试组,为什么还要QA?

高山

测试 QA CMMI

AI简报:图像超分模型RCAN+SRResNet

AIWeker

人工智能 深度学习 5月月更 超分

Dart 2.17发布,新特性速递

岛上码农

flutter ios 安卓开发 跨平台开发 5月月更

Java 集合看这一篇就够了

爱好编程进阶

程序员 后端开发

IntelliJ IDEA如何clean或者install Maven项目

爱好编程进阶

程序员 后端开发

Java进阶备战金九银十88道真题:多线程+集合

爱好编程进阶

Java 程序员 后端开发

KMP子字符串匹配算法学习笔记

爱好编程进阶

Java 程序员 后端开发

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