写点什么

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

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

关注

评论

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

使用 Google Breakpad 来助力解决程序崩溃

HelloWorld杰少

ios 游戏开发 崩溃分析 google_breakpad 8月月更

《Effective Java》第16条:要在仅有类中使用访问方法而非公有域

okokabcd

Java

SpringCloud OpenFeign 请求重试

程序知音

Java spring 程序员 微服务 SpringCloud

应用系统日志打印规范实践之道

陈俊

日志 规范

离线渲染与实时渲染杂谈——从发布会上的产品展示说起

3DCAT实时渲染

《Effective Java》第9条:try-with-resources优先于try-finally

okokabcd

Java

Java避坑指南:Java中 java.lang.String你真的以为是不可变的吗?java11和java17是相同的结果吗?

崔认知

云原生(十五) | Kubernetes篇之深入了解Pod

Lansonli

云原生 k8s 8月月更

企业与团队怎样建立一个有效的、切实可行的知识管理系统

Baklib

开源一夏 | 腾讯云对象存储cos获取图片像素信息

六月的雨在InfoQ

腾讯云 开源 COS 8月月更

Spring Cloud Stream简介

阿泽🧸

spring cloud stream 8月月更

企业中的知识管理价值是怎样体现的

Baklib

企业为何要实行知识管理?

Baklib

纳瓦尔宝典:财富与幸福指南

石云升

读书笔记 财务自由 幸福 8月月更

数据结构——队列

工程师日月

8月月更

使用 JavaScript Promise 读取 Github 某用户的数据

汪子熙

JavaScript Promise 异步编程 Javascript框架 8月月更

架构师第一课,一文带你玩转ruoyi架构

小鲍侃java

框架 Java web 构架 spring-boot 签约计划第三季

为什么我们需要关注基于 EIP-3664 标准的可拆分,可组合的NFT?

股市老人

Redis 基础

武师叔

8月月更

鸿蒙设备开发之从0到1联网上云-概述篇

愚公搬代码

签约计划第三季

(WebFlux)002、如何打印日志与链路ID

编号94530

spring 日志 aop SpringWebflux Reactor3

MyBatis(一、快速入门)

开源 springmvc Mybati 8月月更

一篇文章让你重学HTTP!

Albert Edison

https 计算机网络 HTTP 8月月更

Mysql命令大全

跳楼梯企鹅

MySQL #数据库

Android进阶(十二)Fragment与Activity讲解

No Silver Bullet

android Activity Fragment 8月月更

SRv6在SFC中的应用

穿过生命散发芬芳

8月月更 SRv6

RocketMQ顺序消息之消息消费

急需上岸的小谢

8月月更

每日一R「05」生命周期

Samson

学习笔记 8月月更 ​Rust

大数据技术生态,不懂你捶我

大数据指北

大数据 大数据开发

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