写点什么

使用 SAFE 栈进行 F# Web 开发

2018 年 5 月 14 日

看新闻很累?看技术新闻更累?试试下载 InfoQ 手机客户端,每天上下班路上听新闻,有趣还有料!

SAFE 栈是一套可以用来构建 Web 应用程序的 F#库。近日,Tomasz Heimowski 在 F# eXchange 2018 大会的一个现场编码环节中介绍了这个栈。他在演讲中说明了创建和部署一个评估应用程序的全部过程。

SAFE 栈包括:

  • Suave,一个独立 Web 服务器库
  • Azure
  • Fable,一个 F#到 Javascript 的转译器
  • Elmish,一个受 Elm 启发的 UI 库

开发依赖于.NET SDK 2.0 和 Nodejs。运行应用程序只需要.NET Core。开始的时候,有一个模板可以用来创建一个基础的应用程序。该应用程序包含示例代码和构建文件。

复制代码
dotnet new -i SAFE.Template
dotnet new SAFE
build run

Fable.Elmish 提供了面向 HTML 元素的 F#绑定。HTML 元素是用 F#构建的,可以在编写元素定义时设置事件处理器。

复制代码
let submit (model : Model) (dispatch : Msg -> unit) =
Button.aFa
[ Button.Color IsPrimary
Button.IsFullwidth
Button.OnClick (fun _ -> dispatch Submit)
Button.IsLoading model.Loading ]
[ str "Submit" ]

SAFE 模板还包含webpack 用于热加载。Webpack 是一个客户端模块打包器。SAFE 栈感兴趣的webpack 特性是“模块热替换(Hot Module Replacement)”,让应用程序可以替换应用程序的某些部分而不丢失状态。

Fable.Remoting 提供了一种在客户端和服务器之间共享接口的方式。它处理在客户端和服务器端的序列化和反序列化。对象定义和服务接口位于一个不同的库中,客户端和服务器端都引用了这个库。

复制代码
// 定义服务的接口
type IVotingProtocol =
{ getResults : unit -> Async<VotingResults>
addVote : Vote -> Async<VotingResults> }
// 客户端代码使用的类型化服务定义
let api : IVotingProtocol =
Proxy.createWithBuilder<IVotingProtocol> Route.builder

在服务器端,接口实现是使用面向 Suave 的 Fable.Remoting 辅助程序在服务器库中接入的。

复制代码
let init : WebPart =
let votingProcotol : IVotingProtocol =
{ getResults = getResults
addVote = addVote }
// 针对特定实现创建一个 WebPart
FableSuaveAdapter.webPartWithBuilderFor votingProcotol Route.builder

在演讲结束时,应用程序部署到了 Azure 上。SAFE 模板并没有直接与云提供商集成。相反,可以创建一个 Docker 镜像,然后部署到云提供商,在这个例子中是 Azure 容器。

GitHub 提供了有关 SAFE 栈的文档和代码样例。

查看英文原文: F# Web Development With the SAFE Stack

2018 年 5 月 14 日 19:00772
用户头像

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

关注

评论

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

架构师训练营第五周作业

月殇

极客大学架构师训练营

UML-食堂就餐卡系统

笨笨程序猿

极客大学架构师训练营 UML

架构师训练营第 1 期第 5 周作业

好吃不贵

极客大学架构师训练营

架构师训练营第五周总结

月殇

极客大学架构师训练营

第一周10/25

张冬冬

【架构师训练营第 1 期】第五周作业

知鱼君

第五周 作业第二题

sean

极客时间-架构训练营 第一周总结-做架构的姿势

架构师训练营 1 期 - 第五周总结(vaik)

行之

极客大学架构师训练营

Let's Go

escray

新年计划

第一周作业

tothegump

极客大学架构师训练营

架构师训练营week1-食堂就餐卡系统设计

花果山

分布式一致性Hash算法

黄立

架构师训练营第二期-第一周作业

john_zhang

第五周作业

架构2期第1周作业及总结

supersky6

Week 5 总结

黄立

总结

架构师训练营第 1 期 - 第5周课后练习

Anyou Liu

极客大学架构师训练营

架构师训练营第五周作业

CmHuang

第一周学习总结

孤星

架构师训练营第五周作业

Shunyi

极客大学架构师训练营

第一周学习总结

tothegump

极客大学架构师训练营

Week 1 :架构的方法(学习总结)

shuyaxx

架构师训练营第 1 期 -- 第五周作业

发酵的死神

极客大学架构师训练营

极客时间架构 1 期:第 5 周 技术选型(一) - 命题作业

Null

训练营第一周

小一

架构训练

第一周作业

jingx

架构师 01 期,第五周课后作业

子文

架构师训练营第一周作业

张浩

作业1-食堂就餐卡系统设计

arcyao

架构师训练营第五周学习总结

文智

极客大学架构师训练营

「中国技术开放日·长沙站」现场直播

「中国技术开放日·长沙站」现场直播

使用SAFE栈进行F# Web开发-InfoQ