内容简介:Rocket 0.4 发布了,Rocket 是 Rust 的 Web 框架,专注于可用性、安全性和性能。 此版本向各个方向都迈进了一步,带来了各项新功能和改进,可提高开发人员的工作效率,提高应用程序的安全性和稳健性,提供新的可扩...
Rocket 0.4 发布了,Rocket 是 Rust 的 Web 框架,专注于可用性、安全性和性能。
此版本向各个方向都迈进了一步,带来了各项新功能和改进,可提高开发人员的工作效率,提高应用程序的安全性和稳健性,提供新的可扩展性,并提供更新的 工具 链稳定性。
主要亮点包括:
Codegen 重写
rocket_codegen 包已被完全重写为使用稳定的过程宏 API,之前它使用私有的、不稳定的 rustc API。
新的 Rocket 应用导入方式:
- #![feature(plugin)] - #![plugin(rocket_codegen)] + #![feature(proc_macro_hygiene, decl_macro)] - extern crate rocket; + #[macro_use] extern crate rocket;
rocket_codegen 不应该直接依赖,需要从 Cargo.toml 中删除:
[dependencies] - rocket = "0.3" + rocket = "0.4" - rocket_codegen = "0.3"
类型化 URI
0.4 引入了 uri! 宏,允许开发者以健壮、类型安全和 URI 安全的方式构造 URI 路由。类型或路由参数不匹配将在编译时被捕获,并且对路由 URI 的更改会自动反映在生成的 URI 中。
下边这个路由:
#[get("/person/<name>?<age>")] fn person(name: String, age: Option<u8>)
可以按如下方式创建 person 路由的 URI:
// with unnamed parameters, in route URI declaration order let uri = uri!(person: "Mike Smith", 28); assert_eq!(uri.to_string(), "/person/Mike%20Smith?age=28"); // with named parameters, order irrelevant let uri = uri!(person: name = "Mike", age = 28); let uri = uri!(person: age = 28, name = "Mike"); assert_eq!(uri.to_string(), "/person/Mike?age=28"); // with a specific mount-point let uri = uri!("/api", person: name = "Mike", age = 28); assert_eq!(uri.to_string(), "/api/person/Mike?age=28"); // with optional query parameters ignored let uri = uri!(person: "Mike", _); let uri = uri!(person: name = "Mike", age = _); assert_eq!(uri.to_string(), "/person/Mike");
如果路由的 URI 以不兼容的方式更改,或者错误参数类型不对,Rocket 会在编译时通过一条消息通知:
error: person route uri expects 2 parameters but 1 was supplied --> examples/uri/src/main.rs:9:29 | 9 | uri!(person: "Mike Smith"); | ^^^^^^^^^^^^ | = note: expected parameters: name: String, age: Option<u8>
类型错误:
error: the trait bound u8: FromUriParam<Query, &str> is not satisfied --> examples/uri/src/main.rs:9:35 | 9 | uri!(person: age = "10", name = "Mike"); | ^^^^ FromUriParam<Query, &str> is not implemented for u8 |
数据库支持
Rocket 0.4 内建了对 ORM 无关的数据库连接池的支持,允许通过三个简单的自动化步骤,通过连接池轻松配置和连接 Rocket 应用程序到数据库:
Rocket.toml 中配置数据库。
将请求 guard 类型和 fairing 与每个数据库相关联。
使用请求 guard 来检索处理程序中的连接。
改进查询
查询字符串处理已经彻底改进,解决了 Rocket 呼声最高的请求 #608。新查询处理路由语法和语义的设计考虑了以下目标:
启用静态查询组件的匹配。
任何情况都不存在 special-casing,而是类型驱动的流量。
特定的查询 key/value 对 Ad-hoc 匹配。
默认情况下是宽松解析,允许缺少参数。
查询参数顺序无关匹配。
有状态的 Handler
Handler 类型已经一般可用,这用于实现新 Handler trait 的任何类型。新的 StaticFiles contrib 类型使用此功能提供比以往更容易的静态文件服务,例如,要在 /public 中访问 /static 目录中的本地文件,只需编写:
fn main() { rocket::ignite() .mount("/public", StaticFiles::from("/static")) .launch(); }
Responder 派生
可以使用命名字段将 Responder trait 派生为 enum 和 struct,这极大地简化了从单个处理程序返回多种类型的响应。
实时模板重载
在运行时自动重新加载更改的模板,无需重新编译,适用于所有主要平台。出于安全性和性能原因,仅在以调试模式编译应用程序时才启用该功能。
What's Next
关于下一版本 0.5,重点仍然是可用性、稳定性、安全性和性能。Rocket 0.5 的 roadmap:
支持 Rust stable
异步请求处理
Multipart Form 支持
更强的 CSRF 和 XSS 保护
此外还有许多其它的新功能和功能改进,详情查看发布公告。
下载地址:
【声明】文章转载自:开源中国社区 [http://www.oschina.net]
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 引介 | Turbo-Geth 客户端:数据库改进
- 分布式 NewSQL 数据库 TiDB 2.0.6 发布,改进兼容性
- 分布式数据库 Apache HBase 1.4.0 带来新功能和改进
- 数据库管理工具 DBeaver 社区版 5.1.2 改进了 SQL 编辑器
- Rails 6.1 稳定版发布:支持水平分区、改进多数据库支持、Strict Loading
- FreeBSD 13.0-RC1 发布:改进 TCP 性能、修复和改进 SCTP
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。