阿里云「飞天发布时刻」2024来啦!新产品、新特性、新能力、新方案,等你来探~ 了解详情
写点什么

Suave 1.0 发布,一个面向 F#的 Web 服务器和开发库

  • 2016-01-29
  • 本文字数:818 字

    阅读完需:约 3 分钟

近日,Suave 1.0 发布,为.NET 开发带来了一个新的 Web 开发库。Suave 包含一个轻量级的、完全异步的 Web 服务器以及一个描述 HTTP 处理管道的语义模型。Suave 可以运行在多种平台和操作系统上,包括 Windows、OSX、Linux、.NET 和 Mono。虽然可以在任何.NET 语言中使用,但 Suave“连结符(combinators)”和类型是设计用于 F#的。

Suave 的编程模型是借助连结符使用较小的函数创建较大的函数。Suave 维护者 Henrik Feldt 是这样解释的:

连结符是高阶函数,可以用不同的方式组合,达到不同的效果,生成 HTTP 响应。

Suave 有像OK "Hello"notFound这样的连结符及其他许多底层 HTTP 结构,使开发人员可以编写任何种类的 Web 服务。在 Suave 中,我们使用类型WebPart操作函数域,其中type WebPart = HttpContext -async<HttpContext option>

类型option为我们使用 success/fail 语义及解析成不同的路由提供了可能。

我们使用一个名为choose的函数,它接受一个WebPart列表,并按顺序为每个WebPart提供一个HttpContext,直到其中一个WebPart返回Some HttpContextHttpContext中包含已经编码好的响应,服务器将发送给 HTTP 客户端。

我们还使用一个>=>操作符组合WebPart及解析路由。

下面是使用 Suave 实现经典的“Hello World!”示例。该应用程序会使用“Hello World!”响应它收到的所有请求。

复制代码
open Suave
startWebServer defaultConfig (Successful.OK "Hello World!")

下面的例子展示了如何匹配路由以及没有匹配的路由时返回 404 页面:

复制代码
let app : WebApp =
choose[
path "/foo" >=> OK "foo"
path "/bar" >=> OK "bar"
notFound "no handlers found."
]
startWebServer defaultConfig app

Suave 是一个开源项目,托管在 GitHub 上。 Suave 官方网站提供了文档和示例。此外, InfoQ 还对 Henrik Feldt 进行了更广泛的采访,他就 Suave 是什么以及如何使用讲述了更多的细节。

查看英文原文: Release 1.0 of Suave, a Web Server and Development Library for F#

2016-01-29 18:001439
用户头像

发布了 1008 篇内容, 共 374.3 次阅读, 收获喜欢 341 次。

关注

评论

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

助力直播平台源码脱颖而出,要完成哪些关键功能?

开源直播系统源码

软件开发 直播源码

flutter系列之:Material中的3D组件Card

程序那些事

flutter 程序那些事 6月月更

远程办公-如何提高开会效率?| 社区征文

石云升

远程办公 开会 会议 6月月更 初夏征文

C#入门系列(十六) -- 类及其成员介绍

陈言必行

C# 6月月更

c语言选择,循环语句概述

工程师日月

6月月更

【协程】LifecycleScope源码解析

yechaoa

android 协程 6月月更 LifecycleScope

面试突击57:聚簇索引=主键索引吗?

王磊

Java MySQL 面试

实战 | Kibana面板使用

写程序的小王叔叔

Kibana ELK Stack 6月月更

CentOS环境基于nginx搭建负载均衡

乌龟哥哥

6月月更

spring4.1.8扩展实战之五:改变bean的定义(BeanFactoryPostProcessor接口)

程序员欣宸

Java spring Spring Framework 6月月更

纯CSS 毛玻璃效果 💎

德育处主任

CSS 纯CSS 6月月更

Java Core 「8」字节码增强技术

Samson

学习笔记 Java core 6月月更

几个非常有用的 Flutter 技巧,你可以立即使用!

坚果

6月月更

读《Software Systems Architecture》(27)—— The Availability and Resilience Perspective

术子米德

架构师成长笔记

莫把功能当能力!从企业架构视角看警察在火锅店站岗

涛哥 数字产品和业务架构

企业架构

中台的细节

卢卡多多

中台 6月月更

python停车时间计算,时分秒计算(split()函数)

写代码两年半

Python 6月月更

测试流程如何落地?

老张

软件测试 质量保障

力扣每日一练之二维数组上篇Day4

京与旧铺

6月月更

JVM调优简要思想及简单案例-JVM是什么?

zarmnosaj

6月月更

gogs使用webhook部署react单页应用

Nick

ci 持续集成 React 6月月更 gogs

InfoQ 极客传媒 15 周年庆征文| 手把手带你入门 API 开发

宇宙之一粟

flask-restful 6月月更 InfoQ极客传媒15周年庆 API开发

Paper Reading 预告 | Volcano-An Extensible and Parallel Query Evaluation System(众神推荐的 Paper 下载合集)

TiDB 社区干货传送门

TiDB Paper Reading

Linux开发_Makefile规则与Shell脚本语言

DS小龙哥

6月月更

读《Software Systems Architecture》(26)—— The Performance and Scalability Perspective

术子米德

架构师成长笔记

读《Software Systems Architecture》(28)—— The Evolution Perspective

术子米德

架构师成长笔记

[数据分析实践]-文本分析-U.S. Patent Phrase-1

浩波的笔记

数据分析

字符串

Jason199

js 字符串 6月月更

InfoQ 极客传媒 15 周年庆征文|漫谈公网网络延迟

耳东@Erdong

运维 6月月更 InfoQ极客传媒15周年庆 网络延迟

【愚公系列】2022年06月 通用职责分配原则(三)-低耦合原则

愚公搬代码

6月月更

测试开发【Mock平台】04实战:前后端项目初始化与登录鉴权实现

MegaQi

测试平台开发教程 测试干货 6月月更

Suave 1.0发布,一个面向F#的Web服务器和开发库_.NET_Pierre-Luc Maheu_InfoQ精选文章