科技一哥|Web框架,2020如何选择Rust

Rust是目前最优雅而且热门的编程语言之一 , 性能上可以比肩C、编译时安全、没有GC的累赘、异步和范型支持 , 注定这是将来流行的语言 。 一般认为Rust是一个很好的系统语言 , 但实际上Rust在各个领域都做的不错 , 今天我们就来说说Rust的Web框架 。
科技一哥|Web框架,2020如何选择Rust
文章图片
概述
截至2020年7月 , Rust生态系统中的主要Web框架有:actix-web、rocket、tide和warp 。 那么问题来了:如果要用Rust构建一个生产环境用的API , 应该选择哪框架呢?
本文我们就来解答这个问题 , 我们将从几个方面对上述的各个框架予以说明:包括全面性(功能全面)、社区与采纳度、同步和异步(及其选择的future运行时)、文档教程和示例以及API和人机工程学 。
当然虫虫历来奉行这样的理念那就是没有绝对的选择:不同的环境(和个人好恶)可能会导致选择不同的架构 。
全面性
actix-web , tide和warp都是廋web框架:他们只提供基本的HTTPWeb服务器 , 路由逻辑 , 中间件基础设施 , 基本的构建模块和抽象 , 从而解析、操作和响应HTTP请求 。
rocket框架则与他们相反:它旨在一栈撸 , 对最常见的需求都可以通过rocket中的组件来提供 , 随要随取 , 开箱即用 。 另外它也提供了扩展机制 , 开发人员可以使用hook扩展用例 。
rocket发内置了和ORM集成 , 可以管理和配置流行数据库(例如Postgres , Redis , Memcache等) 。
科技一哥|Web框架,2020如何选择Rust
文章图片
与其他语言的Web框架进来对比的话:
actix-web , tide和warp更像是Python语言的Flask或JS中的ExpressJavascript但是没有提供现成的配置管理系统或ORM集成 。 需要有开发者手动自定义构建API , 并需要引入所需的功能库 , 自己处理图片样式等;
rocket则更接近于Python的Django或PHP的Symphony框架:拥有一个稳定而强大的核心 , 附带一组高质量组件 , 可满足构建坚固的Web应用程序时的日常需求 。 rocket要在宽度和范围上与同行匹敌 , 还有很长的路要走 , 但这绝对是一个良好的开端 。
当然 , 这是截止目前各框架的情况 , 各个框架可能也会不断地调整改善 。 比如actix-web已经在慢慢积累更多的功能(从安全到会话管理) , 在GitHub下actix组织的actix-extras仓库收集了相关的生态体系 。
科技一哥|Web框架,2020如何选择Rust
文章图片
另外需要说明的是 , 用廋Web框架开发 , 也并非就是从零开始要自己动手构建所有内容 , 毕竟有社区的生态体系 , 我们需要弄的也是别人需要的 , 很多已经前人帮我都做好了 , 我们无需重复造轮子 , 只需''拿来''用就好了 。
社区与采纳度
针对四个web框架 , 我们浏览Rustcrates库中的统计数字如下:
构架总下载量日下载量
actix-web1250k3000
rocket525k1000
warp435k3000
tide47k300
由于各个框架出现的早晚有别 , 总下载量不能客观反映框架的流行程度 , 但是日下载量可以很好地衡量一个框架的目前的流行程度 。 我们考虑社区规模和流行程度主要考虑以下因素:
具有规模应用的框架 , 有更多人帮我们趟过它的坑 , 所以其稳定性也会更好 。
规模越 , 该框架的支持crates的数量也越多;
框架用的人多 , 其使用教程 , 问题解决方案和使用经验也会越多 , 遇到问题更容易得到解决 。
对廋框架来说 , 支持crates数量也是框架可实用的关键 。 我搜索框架名称时查看在crates.io的搜索结果数 , 可以反应各个框架的社区规模的影响:
构架搜索结果
rocket178