NiQin (blog: 泥芹) shared the aphorism --
I returned and saw under the sun, that the race is not to the swift, nor the battle to the strong, neither yet bread to the wise, nor yet riches to men of understanding, nor yet favour to men of skill; but time and chance happeneth to them all. -- 《圣经》

[Rust] Rust web 框架现状【2021 年 1 季度】

💥 内容涉及著作权,均归属作者本人。若非作者注明,默认欢迎转载:请注明出处,及相关链接。

Summary: 介绍了 Rust web 框架的开发状态、应用选择考量点等,涵盖安全性、灵活性、社区生态,以及项目规模等衡量因素。涵盖了包括 web 前端框架、Wasm 以及 web 后端框架。译者增加了对应的中文资源链接,方便感兴趣的朋友快速学习。

Topics: rust webassembly wasm rust-web rust-web-框架 rust-web-framework

本文翻译自 Abiodun Solomon 发表于 2021 年 1 月 15 日的文章,阅读时间大约 3-5 分钟。

引文

基于开源、快速开发、可靠性,以及高性能的特性,Rust 正在成为最流行的编程语言之一。在 Rust 中构建新的 web API 时,需要着重考虑前端和后端开发,以及所采用 web 框架的优缺点。

在本文中,我们将讨论 web 框架是什么,并在前端和后端开发中,关于当前框架的使用,提供一些建议。

web 框架是什么?

web 框架是支持 web 应用开发的软件工具;web 框架的范围涵盖了从微应用的小型代码库,到企业应用的大型代码库,以及介于两者之间的所有层级。

几乎所有 web 框架均为数据库、模板、会话、迁移,以及其它实用程序提供了支持库,以加快开发过程。较简单的 web 框架,更关注于呈现静态内容的前端管理。无论您的项目需要什么技术和工具,web 框架都可以提供。如 web 服务、web 资源,以及 web API 等,以帮助开发团队实现他们的想法。

在为您的项目选择合适的 web 框架时,您的开发团队应着重考虑以下方面:

  • 安全性
  • 灵活性
  • 社区生态
  • 项目规模

根据您项目中需求的优先级,不同的 web 框架将帮助您解决最为紧迫的开发任务。本文中,我们将专门讨论用 Rust 构建的 web 框架。

rust-web

web 框架的优势是什么?

Web 框架使开发人员更容易进行 web 开发,以及构建桌面应用程序。通过标准化构建过程,和其常见的自动化活动和任务,web 框架可以节省开发人员的时间,甚至可以促进代码重用,以提高效率。

在下面的内容中,我们将回顾 Rust 中的 web 框架,因为它们与使用 Rust 进行前端和后端的开发相关。然后,我们将评估每个框架阶段的稳定性、生产就绪性,以及适用项目规模。

web 前端框架,以及 Wasm

WebAssembly,简称 Wasm,是一种新的编码方式,可以在现代的网络浏览器中运行 - 它是一种低级的类汇编语言,具有紧凑的二进制格式。wasm 被设计为可以与 JavaScript 共存,允许两者一起工作。它支持包括 C/C++、Golang,以及 Rust 语言,并对字节码进行目标编译,以便它们可以以近乎本地的性能,运行在 Web 之上。Wasm 的输出可与 JS 一起运行,并可以发布到 npm 和其他包。

Rust 使用一个名为 wasm-pack 的工具,以组装和包装为目标 wasm 应用的 crate。详细请参阅 Rust 及其 Wasm 应用开发指南

以下是一些为 Rust(Wasm)设计的前端 web 框架。

stdweb(译注:已超过一年半未更新)

stdweb 是一个前端标准库,它提供了直接与 JavaScript web API 通信的能力。它是为了让开发人员能够在 Rust 中创建成熟的 JavaScript 应用而精心设计的,通过在语言之间提供简单的 API 绑定,以提高速度和性能。

stdweb 支持闭包、任意结构,以及 web API 的标准组件,包括 DOM、event,和 window。请参阅这几个示例项目,以了解它是如何工作的。

概述:

  • 稳定:是
  • 生产就绪:否
  • 项目规模:小

Yew(译注:最为成熟)

Yew 是 stdweb 的改进版本。它是一个基于组件的框架(类似于 React 和 Elm),支持多线程、基于组件的模式,以及其它类似于 stdweb 的特性。

概述:

  • 稳定:是
  • 生产就绪:否
  • 项目规模:小、中、大

Percy

Percy 是一个用于构建单页应用程序(SPA),以及 UI 管理的工具包,包括针对特定浏览器和屏幕(桌面、移动)的优化。Percy 的开发工作正在进行;需要很多改进,以获得更好的结构、优化的样板文件和一些 bug 修复。

概述:

  • 稳定:否
  • 生产就绪:否
  • 项目规模:小、中、大

Sauron

Sauron 是一个微前端框架,它的灵感来自 Elm 体系结构。它支持事件、状态管理和组件。Sauron 使用一个名为html2sauron 的库,将 html 转换为 Sauron 视图代码,然后进行渲染优化。

概述:

  • 稳定:否
  • 生产就绪:否
  • 项目规模:小

Seed(译注:译者测试过此框架,比较推荐)

Seed 是一个前端框架,用于创建性能驱动的,且可靠的 web 应用程序,该应用程序还具有类似 Elm 的体系结构。它有最小的配置和样板文件,并有清晰的文档,使得任何人都可以很容易地开始。

概述:

  • 稳定:是
  • 生产就绪:否
  • 项目规模:小、中、大

Smithy

Smithy 为开发人员提供了一个简单的学习曲线。它支持注入和子组件、事件、状态管理、与 JavaScript 交互、smd! 宏(受 React 的 Jsx 启发),以及对服务器部署的支持。

概述:

  • 稳定:是
  • 生产就绪:是(译注:原文如此,实际 smithy 仅为 0.07 版本,2 个开发者)
  • 项目规模:小、中、大

web 后端框架

后端开发,是指 web 应用的服务器端操作。后端开发是应用程序的核心操作,这些操作通常控制和处理其数据和行为,例如提交表单或登录帐户。后端开发主要关注于数据管理,以及处理数据所需的数据库、脚本、自动化实践,以及体系结构。

Rust 为后端开发提供了多种 web 框架,包括来自不同开发者的工具和库。旨在提供一种高效、安全和灵活的方法,以构建、测试和运行应用程序。

后端开发框架的一些最典型功能包括:

  • 数据库管理
  • 会话
  • 模板
  • 对象关系映射(ORM)
  • 迁移和部署

Rocket

Rocket 是一个流行的、成熟的 web 框架,它使开发人员可以轻松、快速地编写 web 应用。而不必考虑安全性、灵活性或功能。它支持测试库、cookie、数据流、路由、模板、数据库、ORM,以及项目样板等。Rocket 还拥有一个庞大而活跃的开发者社区。

概述:

  • 稳定:是
  • 生产就绪:是
  • 项目规模:小、中、大

Actix

类似 Rocket,Actix 是一个强大的后端 web 框架。Actix 采用了一种基于 actor 模型的架构模式,并为构建服务和微应用开发做好了充分的准备。它支持路由、中间件、测试、websocket、数据库,以及服务重载等,并且可以托管在 NGINX 之上。Actix 可以用来构建一个全面的 web 应用程序和 web API。

概述:

  • 稳定:是
  • 生产就绪:是
  • 项目规模:小、中、大

Gotham

Gotham 是一个灵活的 web 框架,为稳定版 Rust 构建。其是静态类型的,从而确保应用程序在编译时总是正确表达。Gotham 基于 Tokio 和 hyper,提供异步支持。

Gotham 支持路由、提取器(类型安全数据请求)、中间件、状态共享和测试。Gotham 没有工程结构、样板文件,或数据库支持。

概述:

  • 稳定:是
  • 生产就绪:是
  • 项目规模:小、中、大

Rouille

Rouille 是一个微框架,它通过一个监听 socket 解析 HTTP 请求,采用线性请求和响应设计。它是为了方便用户学习而构建的。Rouille 通过 CGI、输入(请求头和请求体)、内容编码、代理、会话和 websocket 支持请求处理。

概述:

  • 稳定:是
  • 生产就绪:否
  • 项目规模:小

Nickels

Nickels 是一个小型而轻量级的框架,其 API 受到了流行的 JavaScript Express 框架的启发。它提供了灵活的路由、中间件、JSON 处理、自定义错误处理程序、模板,以及样板文件等。

概述:

  • 稳定:是
  • 生产就绪:是
  • 项目规模:小、中

Thruster

Thruster 是一个快速而可靠的 Rust web 框架,灵感来自于分层设计的 Koa 和 Express。Thruster 的 SSL 特性已就绪,可提供安全访问和测试的。Thruster 是为适应 async/await 而构建的,并为中间件、错误处理、数据库和测试提供支持。

概述:

  • 稳定:否
  • 生产就绪:否
  • 项目规模:小型

Iron

Iron 是一个内置于 hyper 中的 web 框架,关注并发性、可扩展性和最小负载。它可以在多台机器上水平扩展,或者在更强大的机器上多种方式扩展。因为它被设计成可扩展和可插拔的,所以 Iron 主要将中间件、插件,可选扩展(第三方扩展)作为其主要组件。

Iron 提供对路由、JSON 解析、URL 编码解析、会话,以及静态文件的支持。

概述:

  • 稳定:是
  • 生产就绪:是
  • 项目规模:小型

Tide

Tide 是小型而实用的 Rust web 应用程序框架,为快速开发而构建(类似于 python 的 flask,或 nodejs 的 express,或 Ruby 的 Sinatra),专注于以异步 Rust 版本构建 web 应用。

Tide 提供对路由、身份验证、侦听器、日志、模板引擎、中间件、测试,以及其它实用程序的支持。

概述:

  • 稳定:是
  • 生产就绪:是
  • 项目规模:小、中、大

对于构建高级 web 应用的后端 web 框架,我推荐 Rocket、Actix,以及 Tide(异步支持)。它们也都被 Rust 社区所接受,并且各自框架社区都提供了完善的支持库。

结语

Rust web 开发中,为前端或后端开发项目选择正确的 web 框架时,必须考虑以下几点:框架是否稳定?为生产环境中使用,准备就绪了吗?它适合你的项目规模吗?

根据您的实际情况进行选择,然后,您使用的 Rust web 框架将帮助您,提高开发效率、运行性能,以及生产率。

谢谢您的阅读!


Related Articles

  1. [WebAssembly] yew SSR 服务器端渲染
  2. [Rust] async-std 创建者对于最近“项目是否已死?”,移除对其支持等的答复
  3. [Rust] Rust 1.56.0 版本和 Rust 2021 版次发布,新特性一览,及项目的迁移、升级
  4. [WebAssembly] Rust 和 Wasm 的融合,使用 yew 构建 WebAssembly 博客应用的体验报告
  5. [Rust] Rust 官方周报 399 期(2021-07-14)
  6. [WebAssembly] Rust 和 Wasm 的融合,使用 yew 构建 web 前端(5)- 构建 HTTP 请求、与外部服务器通信的两种方法
  7. [Rust] Rust 官方周报 398 期(2021-07-07)
  8. [Rust] Rust 官方周报 397 期(2021-06-30)
  9. [Rust] Rust 官方周报 396 期(2021-06-23)
  10. [Rust] Rust 官方周报 395 期(2021-06-16)
  11. [Rust] Rust 1.53.0 明日发布,关键新特性一瞥
  12. [Rust] 使用 tide、handlebars、rhai、graphql 开发 Rust web 前端(3)- rhai 脚本、静态/资源文件、环境变量等
  13. [Rust] 使用 tide、handlebars、rhai、graphql 开发 Rust web 前端(2)- 获取并解析 GraphQL 数据
  14. [Rust] 使用 tide、handlebars、rhai、graphql 开发 Rust web 前端(1)- crate 选择及环境搭建
  15. [Rust] Rust 官方周报 394 期(2021-06-09)
  16. [Rust] Rust web 前端库/框架评测,以及和 js 前端库/框架的比较
  17. [WebAssembly] Rust 和 Wasm 的融合,使用 yew 构建 web 前端(4)- 获取 GraphQL 数据并解析
  18. [WebAssembly] Rust 和 Wasm 的融合,使用 yew 构建 web 前端(3)- 资源文件及小重构
  19. [WebAssembly] Rust 和 Wasm 的融合,使用 yew 构建 WebAssembly 标准的 web 前端(2)- 组件和路由
  20. [WebAssembly] Rust 和 Wasm 的融合,使用 yew 构建 WebAssembly 标准的 web 前端(1)- 起步及 crate 选择
  21. [Rust] Rust 官方周报 393 期(2021-06-02)
  22. [Rust] Rust 官方周报 392 期(2021-05-26)
  23. [Rust] Rust 中,对网址进行异步快照,并添加水印效果的实践
  24. [Rust] Rust 官方周报 391 期(2021-05-19)
  25. [Rust] Rust,风雨六载,砥砺奋进
  26. [Rust] 为什么我们应当将 Rust 用于嵌入式开发?
  27. [Rust] Rust 官方周报 390 期(2021-05-12)
  28. [Rust] Rust + Android 的集成开发设计
  29. [Rust] Rust 1.52.1 已正式发布,及其新特性详述
  30. [Rust] 让我们用 Rust 重写那些伟大的软件吧
  31. [Rust] Rust 1.52.0 已正式发布,及其新特性详述
  32. [Rust] Rust 官方周报 389 期(2021-05-05)
  33. [GraphQL] 基于 actix-web + async-graphql + rbatis + postgresql / mysql 构建异步 Rust GraphQL 服务(4) - 变更服务,以及小重构
  34. [Rust] Rust 1.52.0 稳定版预发布测试中,关键新特性一瞥
  35. [Rust] Rust 生态中,最不知名的贡献者和轶事
  36. [Rust] Rust 基金会迎来新的白金会员:Facebook
  37. [Rust] Rustup 1.24.1 已官宣发布,及其新特性详述
  38. [Rust] Rust 官方周报 388 期(2021-04-28)
  39. [Rust] Rust 官方周报 387 期(2021-04-21)
  40. [GraphQL] 构建 Rust 异步 GraphQL 服务:基于 tide + async-graphql + mongodb(4)- 变更服务,以及第二次重构
  41. [Rust] Rustup 1.24.0 已官宣发布,及其新特性详述
  42. [Rust] basedrop:Rust 生态中,适用于实时音频的垃圾收集器
  43. [Rust] Rust 编译器团队对成员 Aaron Hill 的祝贺
  44. [Rust] Jacob Hoffman-Andrews 加入 Rustdoc 团队
  45. [机器人] 为什么应将 Rust 引入机器人平台?以及机器人平台的 Rust 资源推荐
  46. [Rust] rust-lang.org、crates.io,以及 docs.rs 的管理,已由 Mozilla 转移到 Rust 基金会
  47. [Rust] Rust 官方周报 386 期(2021-04-14)
  48. [Rust] Rust 编译器(Compiler)团队 4 月份计划 - Rust Compiler April Steering Cycle
  49. [GraphQL] 基于 actix-web + async-graphql + rbatis + postgresql / mysql 构建异步 Rust GraphQL 服务(3) - 重构
  50. [Rust] 头脑风暴进行中:Async Rust 的未来熠熠生辉
  51. [GraphQL] 基于 actix-web + async-graphql + rbatis + postgresql / mysql 构建异步 Rust GraphQL 服务(2) - 查询服务
  52. [GraphQL] 基于 actix-web + async-graphql + rbatis + postgresql / mysql 构建异步 Rust GraphQL 服务 - 起步及 crate 选择
  53. [Rust] Rust 2021 版本特性预览,以及工作计划
  54. [Rust] Rust 用在生产环境的 42 家公司
  55. [Rust] 构建最精简的 Rust Docker 镜像
  56. [Rust] Rust 官方周报 385 期(2021-04-07)
  57. [Rust] 使用 Rust 做异步数据采集的实践
  58. [Rust] Android 支持 Rust 编程语言,以避免内存缺陷
  59. [Rust] Android 平台基础支持转向 Rust
  60. [Rust] Android 团队宣布 Android 开源项目(AOSP),已支持 Rust 语言来开发 Android 系统本身
  61. [Rust] RustyHermit——基于 Rust 实现的下一代容器 Unikernel
  62. [Rust] Rustic:完善的纯粹 Rust 技术栈实现的国际象棋引擎,多平台支持(甚至包括嵌入式设备树莓派 Raspberry Pi、Buster)
  63. [Rust] Rust 迭代器(Iterator trait )的要诀和技巧
  64. [Rust] 使用 Rust 极致提升 Python 性能:图表和绘图提升 24 倍,数据计算提升 10 倍
  65. [Rust] 【2021-04-03】Rust 核心团队人员变动
  66. [Rust] Rust web 框架现状【2021 年 1 季度】
  67. [Rust] Rust 官方周报 384 期(2021-03-31)
  68. [Rust] Rust 中的解析器组合因子(parser combinators)
  69. [生活] 毕马威(KPMG)调查报告:人工智能的实际采用,在新冠疫情(COVID-19)期间大幅提升
  70. [Python] HPy - 为 Python 扩展提供更优秀的 C API
  71. [Rust] 2021 年,学习 Rust 的网络资源推荐(2)
  72. [Rust] 2021 年,学习 Rust 的网络资源推荐
  73. [生活] 况属高风晚,山山黄叶飞——彭州葛仙山露营随笔
  74. [Rust] Rust 1.51.0 已正式发布,及其新特性详述
  75. [Rust] 为 Async Rust 构建共享的愿景文档—— Rust 社区的讲“故事”,可获奖
  76. [Rust] Rust 纪元第 382 周最佳 crate:ibig 的实践,以及和 num crate 的比较
  77. [Rust] Rust 1.51.0 稳定版本改进介绍
  78. [Rust] Rust 中将 markdown 渲染为 html
  79. [生活] 国民应用 App 的用户隐私数据窥探
  80. [GraphQL] 构建 Rust 异步 GraphQL 服务:基于 tide + async-graphql + mongodb(3)- 重构
  81. [GraphQL] 构建 Rust 异步 GraphQL 服务:基于 tide + async-graphql + mongodb(2)- 查询服务
  82. [GraphQL] 构建 Rust 异步 GraphQL 服务:基于 tide + async-graphql + mongodb(1)- 起步及 crate 选择
  83. [Rust] Rust 操控大疆可编程 tello 无人机

Topics

rust(83)

graphql(17)

rust-官方周报(17)

webassembly(16)

wasm(10)

async-graphql(9)

yew(9)

tide(8)

rust-官方博客(8)

rust-web(7)

this-week-in-rust(6)

mysql(5)

actix-web(5)

rbatis(5)

android(4)

mongodb(3)

json-web-token(3)

jwt(3)

cargo(3)

技术延伸(3)

rust-wasm(3)

trunk(3)

handlebars(3)

rhai(3)

用户隐私(2)

学习资料(2)

python(2)

ai(2)

人工智能(2)

postgresql(2)

rust-compiler(2)

rust-基金会(2)

rust-foundation(2)

rustup(2)

rust-toolchain(2)

rust-工具链(2)

rust-游戏开发(2)

rust-区块链(2)

rust-2021(2)

graphql-client(2)

surf(2)

rust-game(2)

async-std(2)

tello(1)

drone(1)

无人机(1)

隐私数据(1)

markdown(1)

html(1)

crate(1)

async(1)

异步(1)

旅游(1)

不忘生活(1)

葛仙山(1)

hpy(1)

python-扩展(1)

正则表达式(1)

解析器组合因子(1)

组合器(1)

regular-expression(1)

parser-combinator(1)

regex(1)

官方更新(1)

rust-工作招聘(1)

rust-技术资料(1)

rust-周最佳-crate(1)

rust-web-框架(1)

rust-web-framework(1)

rust-核心团队(1)

rust-core-team(1)

rust-language-team(1)

pyo3(1)

rust-python-集成(1)

python-性能改进(1)

迭代器(1)

iterator-trait(1)

国际象棋(1)

chess(1)

游戏引擎(1)

game-engine(1)

虚拟化(1)

unikernel(1)

rustyhermit(1)

linux(1)

virtualization(1)

sandboxing(1)

沙箱技术(1)

数据采集(1)

异步数据采集(1)

docker(1)

镜像(1)

生产环境(1)

rust-评价(1)

rust-2021-edition(1)

rust-2021-版本(1)

graphql-查询(1)

vision-doc(1)

愿景文档(1)

代码重构(1)

steering-cycle(1)

方向周期(1)

隐私声明(1)

机器人(1)

robotics(1)

rustdoc(1)

rust-编译器(1)

实时音频(1)

real-time-audio(1)

变更服务(1)

mutation(1)

查询服务(1)

query(1)

rust-贡献者(1)

rust-轶事(1)

rust-稳定版(1)

rust-预发布(1)

rust-测试(1)

安全编程(1)

可信计算(1)

安全代码(1)

secure-code(1)

rust-android-integrate(1)

rust-embedded(1)

rust-嵌入式(1)

rust-生产环境(1)

rust-production(1)

网页快照(1)

网页截图(1)

水印效果(1)

图片水印(1)

yew-router(1)

css(1)

web-前端(1)

wasm-bindgen(1)

区块链(1)

blockchain(1)

dotenv(1)

标识符(1)

rust-1.53.0(1)

rusthub(1)

rust-1.56.0(1)

rust-项目升级(1)

异步运行时(1)

ssr(1)

tokio(1)

warp(1)

reqwest(1)


Elsewhere

- Open Source
  1. github/zzy
  2. github/sansx
- Learning & Studying
  1. Rust 学习资料 - 泥芹