无论使用哪种编程语言,都会存在从小而美到大而全的 Web 框架。传统编程语言往往更倾向于大而全的框架,例如 Java 的 Spring Boot、PHP 的 Laravel、Python 的 和 Ruby 的 Ruby on Rails。
相比之下,新兴语言则更多偏向于小而美的设计。比如 Go 语言中流行的 Gin 和 Echo,Rust 中的 Axum 和 Actix 等。
严格来说,像 Gin、Echo、Axum 或 Actix 这些工具其实更接近“类库”而非严格意义上的“框架”。
哪种更好?
在国内的开发氛围中,显然更偏好大而全的框架。这种倾向可能与国内对敏捷开发和快速交付的高度重视有关。大而全意味着开箱即用,一周开发一个系统并非遥不可及。此外,这类框架通常已经为开发者提供了所谓的“最佳工程范式”,让用户无需过多关注架构本身的问题。
然而,这种便利性是有代价的——这些框架往往限制了用户的自由度,难以进行深度定制。
相反,小而美的框架赋予用户更高的自由度,可以随心所欲地调整架构和模块选择。不喜欢某个 ORM?完全可以换另一个!想自己决定代码组织方式?也完全没问题!这也是为什么国外开发者普遍更偏爱这类框架的原因。
Rust 中的大而全
在 Rust 生态中,Axum、Actix、Rocket 和 Warp 都是小而美的典范。它们更像是一个个积木块,需要开发者亲手搭建出理想的系统。
而 Loco 则是 Rust 中少有的大而全的框架之一,类似于 Ruby 的 Ruby on Rails。它提供了完整的脚手架功能,开箱即用地支持数据库、任务调度、缓存、认证等功能。选择 Loco 几乎等同于获得了更好的最佳实践、更流畅的开发体验、集成测试支持以及更快的应用程序构建能力。
值得一提的是,还有最新出现的 Cot,这是一个风格类似 Python 的 Django 的框架,基于 Axum 构建,并使用 SeaQuery 作为 ORM。不过,它目前仍处于非常早期的阶段。如果想要尝试一个成熟的大而全框架,Loco 可能是更好的选择。
我的选择
个人而言,我更倾向于简洁的框架。因为喜欢尝试新事物,所以希望框架不要过于侵入式。例如,多年前在一个个人 Go 项目中,我曾轻松地将框架从 Gin 切换到 Echo,再切换到 Chi,几乎没有任何副作用。
但在团队协作中,大而全的框架通常是更好的选择。它们能够有效约束代码质量,减少因个人风格差异导致的混乱。这或许也是 Spring Boot 在国内如此流行的原因之一。
整体来看,无论是小而美还是大而全,选择适合当前需求和团队背景的框架才是最重要的。
项目地址:
- Loco: https://github.com/loco-rs/loco
- Cot : https://cot.rs/
- Axum: https://github.com/tokio-rs/axum
- Spring Boot: https://docs.spring.io/spring-boot/index.html
- Gin: https://gin-gonic.com/
- Echo: https://echo.labstack.com/
- Chi : https://github.com/go-chi/chi
- Laravel: https://github.com/laravel/laravel
- Django: https://github.com/django/django
- Actix: https://github.com/actix/actix-web