Rocket 0.4 发布,改进查询、内建数据库支持、uri! 宏

栏目: 软件资讯 · 发布时间: 5年前

内容简介:Rocket 0.4 发布了,Rocket 是 Rust 的 Web 框架,专注于可用性、安全性和性能。 此版本向各个方向都迈进了一步,带来了各项新功能和改进,可提高开发人员的工作效率,提高应用程序的安全性和稳健性,提供新的可扩...

Rocket 0.4 发布了,Rocket 是 Rust 的 Web 框架,专注于可用性、安全性和性能。

Rocket 0.4 发布,改进查询、内建数据库支持、uri! 宏

此版本向各个方向都迈进了一步,带来了各项新功能和改进,可提高开发人员的工作效率,提高应用程序的安全性和稳健性,提供新的可扩展性,并提供更新的 工具 链稳定性。

主要亮点包括:

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 应用程序到数据库:

  1. Rocket.toml 中配置数据库。

  2. 将请求 guard 类型和 fairing 与每个数据库相关联。

  3. 使用请求 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]


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

这才是马云

这才是马云

陈伟 / 浙江人民出版社 / 2011-5 / 30.00元

“幽默马云”、“开心马云”、“顽皮马云”、“狂妄马云”等。《这才是马云》从各个角度揭开了千面马云的真面目,告诉你一个与想象中大不一样的马云。这不只是一本书,更像一部喜剧电影,让你通过声音、色彩、表情等诸多要素走近马云,感受阿里巴巴。没有冗长的说教,只有让人忍俊不禁的细节;没有高深的理论,只有通俗、诚恳的陈述。作者借幽默平常的琐事,记录下马云“可爱”的一面,看完后让人恍然大悟:原来,马云是这样一个人......一起来看看 《这才是马云》 这本书的介绍吧!

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具