火箭是一个网络框架,让Rust编写快速和安全的网络应用程序。
Let's take a look at what Rocket offers。
将请求路由到适当的请求处理程序。我们需要在作为请求处理程序的函数之上指定路由的属性。
xxxxxxxxxx
#[get("/")]
fn index() -> &str {
"Hello, world!"
}
我们使用宏来指定这些属性,例如,路由索引将与根路径中的“获取”请求相匹配。这个处理程序然后将返回一个你好世界消息。
火箭将使用字符串作为一个完整的超文本传输协议响应的主体。
我们也可以有动态参数。
x
#[get("/hello/<name>/<age>")]
fn hello(name: String, age: u8) -> String {
format!("Hello, {} year old named {}!", age, name)
}
你好处理程序将与路径/你好/<名称>/<年龄>的“获取”请求相匹配。该名称将作为字符串类型的名称参数和无符号整数类型的年龄参数传递。然后处理程序将返回格式化的字符串。每个参数必须在路径的括号内定义,并作为处理程序的参数。
只有在解析成功的情况下,才会调用该路由。为了解析字符串,火箭使用了“FromParam”特性,您可以为自己的类型实现它!
处理请求正文数据。例如,一个发布请求,我们需要告诉火箭,我们期待身体数据和参数,将处理这些数据。
xxxxxxxxxx
#[post("/login", data = "<user_form>")]
fn login(user_form: Form<UserLogin>) -> String {
format!("Hello, {}!", user_form.name)
}
在这种情况下,用户表单将是用户登录类型的表单。“表单”是一种内置类型的火箭,它知道如何解析web表单,而用户登录是一种我们可以创建的自定义类型。我们可以使用任何实现FromDataTract的类型。火箭已经包含了其他类型的实现,比如JSON。同样,只有当正文数据能够被正确解析时,处理程序才会执行。
火箭还有请求守卫的概念,这是另一种不需要在路径属性中声明的参数。除非传入的请求满足某些条件,否则这些请求保护程序不会运行。
xxxxxxxxxx
#[get("/sensitive")]
fn sensitive(key: ApiKey) { ... }
在这个例子中,我们有一个自定义类型ApiKey,它实现了请求的特性,例如,可以从头中检索API key并验证签名。如果应用编程接口密钥无法验证,那么敏感处理程序将不会运行。
请求处理程序的返回类型可以是实现响应者特性的任何类型。Rocket为常见类型提供了实现。
xxxxxxxxxx
#[get("/")]
fn route() -> T { ... }
响应者也可能因状态代码而失败,在这种情况下,您也可以使用捕获路径为这些状态代码定义错误处理程序。
xxxxxxxxxx
#[catch(404)]
fn not_found() -> T { ... }
下面是配置和运行火箭应用程序的代码。
xxxxxxxxxx
rocket::ignite()
.mount("/base", routes![index, another])
.launch();
首先,使用火箭的点火功能创建一个火箭实例。然后使用mount函数添加路由,为路由指定基本路径或命名空间,然后使用路由创建一组路由!宏。最后,通过调用启动来启动服务器。
查看视频,了解更多关于火箭的信息:
火箭官员:https://rocket.rs/