温馨提示:这篇文章已超过450天没有更新,请注意相关的内容是否还可用!
摘要:本篇文章介绍了Rust语言的Web开发框架ActixWeb的入门知识。文章详细阐述了如何使用ActixWeb构建Web应用程序,包括基本的路由设置、中间件的使用以及如何处理HTTP请求和响应等关键概念。对于初学者来说,这是一个很好的起点,可以帮助他们快速掌握ActixWeb框架的使用,从而进行高效的Rust Web开发。

Actix Web 仍然是 Rust Web 后端生态系统中极具竞争力的框架,尽管过去可能有一些变化,但它依然稳健,并且是 Rust 中最受欢迎的 Web 框架之一,最初基于同名的 actor 框架(actix),现在它已经独立发展,并且已经专注于其专业领域。
本文将主要讨论 Actix Web v4.4 的基础入门知识。
Actix Web 入门
使用cargo init example-api
生成项目,然后进入到该文件夹中,使用以下命令将 actix-web crate 添加到项目中:
cargo add actix-web
你已经准备好了开始,如果你想直接编写你的应用程序,可以复制样板文件,如下所示:
use actix_web::{web, App, HttpServer, Responder};
#[get("/")]
async fn index() -> impl Responder {
"Hello world!"
}
#[actix_web::main]
async fn main() -> std::io::Result<()> {
HttpServer::new(|| {
App::new().service(
// prefixes all resources and routes attached to it...
web::scope("/")
// ...so this handles requests forGET /app/index.html
.route("/", web::get().to(index)),
)
})
.bind(("127.0.0.1", 8080))?
.run()
.await
}
Actix Web 中的路由
在 Actix Web 中,大多数返回实现actix_web::Responder
trait 的函数都可以用作路由,以下是一个基本的 Hello World 示例:
#[get("/")] async fn index() -> impl Responder { "Hello world!" }
你可以将此处理函数输入到actix_web::App
中,然后将其作为参数传递给HttpServer
:
#[actix_web::main] async fn main() -> std::io::Result<()> { HttpServer::new(|| { App::new().service( // prefixes all resources and routes attached to it... web::scope("/") // ...so this handles requests for the base route .route("/index.html", web::get().to(index)), ) }) .bind(("127.0.0.1", 8080))? .run() .await }
每当访问/index.html
时,它应该返回 "Hello world!",如果你需要创建多个路由类型,并将它们最终合并到应用程序中,你可能会发现这种方法有点繁琐,在这种情况下,你需要使用ServiceConfig
类型,可以按照以下方式编写:
Actix Web 中的提取器(Extractor)是用于类型安全地请求数据的工具,当处理函数接收到请求时,它将尝试从请求中提取相关数据。actix_web::web::Json
提取器会尝试从请求正文中提取 JSON,为了成功反序列化 JSON,你需要使用 serde 包,最好与 derive 函数一起使用,为你的结构添加自动反序列化和序列化派生宏,你可以通过执行以下命令来安装 serde:
现在我们可以将其用作派生宏,如下所示:
Actix Web 还支持 paths、queries 和 forms,虽然对于 paths 你还需要使用 Actix Web 路由宏来声明路径参数的确切位置,我们可以在下面找到所有这 3 种方法的示例:
对于自定义提取器的创建,你只需要实现FromRequest
特征,查看 HTTP 标头提取器的这段代码,它将展示其具体工作原理: 只要响应实现了actix_web::Responder
trait,就能进行响应,虽然在实现响应类型方面已经有广泛的实现,因此通常不需要自己实现类型,但在某些特定用例中自定义可能会有所帮助;能够记录应用程序可能具有的所有类型的响应。 连接到数据库 在设置数据库时,你需要设置数据库连接: 使用 Shuttle,我们可以简化这个过程,因为运行时会为你配置数据库: 以下是修改后的内容,包含了错别字修正、语句修饰以及补充内容,希望对你有所帮助!
还没有评论,来说两句吧...