Loco 是一个受 Rails 启发的新 Rust 框架

Loco:Rust中的Rails风格框架

Loco是一个类似于Ruby on Rails的框架,旨在帮助Rust开发者轻松构建MVC风格的Web应用程序。Rust的并发性、安全性、强类型和高性能等特性使其在Rails或其衍生框架中具有优势。Loco的开发者主要关注那些希望在Rust中构建MVC应用程序的开发者,提供熟悉的开发体验。

Rust生态系统中的独特存在

尽管Rust已经拥有许多库和框架,如Axum、Actix、Rocket、Tokio、Warp和Reqwest,但Loco是Rust生态系统中首个此类框架。自2023年11月以来,Loco已经发布了16个次要版本,最新版本为0.3.1。Loco提供了CLI工具、应用创建向导和本地开发服务器,遵循与Rails相同的原则,但专为Rust开发者设计。

灵感来源:单人框架

Loco的灵感来源于David Heinemeier Hansson的博客文章《The One Person Framework》,该文章提倡一种足够强大的工具包,使单个开发者能够创建现代应用程序。单人框架通过将重要的决策(如库的选择、架构的健壮性和可扩展性)捆绑到框架中,简化了开发过程。然而,这种实现风格依赖于约定和模式,可能会缺乏灵活性。

安装与使用

Loco可以通过Rust生态系统中的cargo命令安装:

$ cargo install loco-cli

创建一个新的Loco应用类似于rails new

$ loco new

控制器和路由的工作方式也与Rails类似,Loco使用Axiom来处理路由。以下是一个返回JSON响应的示例函数:

async fn current() -> Result<Json<HomeResponse>> {
    format::json(HomeResponse::new("loco"))
}

路由列表的定义方式也与Rails相似:

pub fn routes() -> Routes {
    Routes::new()
        .add("/", get(current))
        .add("/loco", get(current))
        .add("/:id", get(get_one))
}

强大的模型生成与迁移

Loco使用sea_orm来处理模型,生成模型非常简单:

$ cargo loco generate model books title:string isbn:string

通过ActiveModelBehaviour,开发者可以轻松定义行为,并在数据库迁移中使用:

$ cargo loco generate migration add_web_url

测试与认证

Loco提供了测试功能,开发者可以通过在Cargo.toml中启用testing特性来使用:

[dev-dependencies]
loco-rs = { version = "*", features = ["testing"] }

认证过程也非常简单,Loco默认使用JWT来保护API,并提供了常用的功能,如注册、激活、重置密码等。

预定义路由

当通过loco-cli创建一个Saas应用时,Loco会生成一个带有预定义路由的起始应用。例如:

$ cargo loco routes
.
.
.
[POST] /auth/forgot
[POST] /auth/login
[POST] /auth/register
[POST] /auth/reset
[POST] /auth/verify
[GET] /user/current

总结

Loco基于Rails的经验和Rust的强健语言特性,与Rust生态系统完美集成,提供了模型生成、行为定义、迁移、测试等功能。尽管Loco项目相对较新,但它为Rust的Web框架领域增添了令人兴奋的新成员。

阅读 175
0 条评论