Rocket 框架基础
Rocket v0.5 DOC
Rocket是Rust的一个web框架,它使编写快速、安全的web应用程序变得简单,而不会牺牲灵活性、可用性或类型安全性。
- 类型安全
从请求到响应,Rocket确保您的类型有意义。 - 样板免费
把时间花在编写真正重要的代码上,让Rocket生成其余的代码。 - 容易使用
简单,直观的api使Rocket平易近人,无论你的背景如何。 - 可扩展
创建任何Rocket应用程序都可以使用的自己的一等(first-class)原语。
简介
Rocket是Rust的web框架。如果你愿意,你可以把Rocket想象成一个更灵活、更友好的Rails、Flask、Bottle和Yesod的混合体。我们更愿意把Rocket看作是一种新事物。Rocket的目标是快速、简单和灵活,同时尽可能提供有保证的安全。重要的是,Rocket还以有趣为目标,它通过确保您编写尽可能少的代码来完成任务来实现这一点。
本指南向您介绍了Rocket的核心,中级和高级概念。阅读本指南后,您应该会发现自己在使用Rocket时非常高效。
读者
假定读者已经很好地掌握了Rust编程语言。我们鼓励Rust新手阅读Rust Book。本指南还假设您对web应用程序的基础知识有基本的了解,例如路由和HTTP。Mozilla在其MDN web文档中对这些概念提供了很好的概述。
前言
Rocket的设计围绕着三个核心哲学:
安全性、正确性和开发人员体验是最重要的。
阻力最小的路径应该引导您获得最安全、最正确的web应用程序,尽管安全性和正确性不应该以降低开发人员体验为代价。Rocket易于使用,同时采取了大量措施来确保应用程序的安全性和正确性,而没有认知开销。所有请求处理信息都应该是输入的,并且是自包含的。
因为web和HTTP本身是无类型的(或者有些人称之为字符串类型(stringly typed
)),这意味着某些东西或某些人必须将字符串转换为本地类型。Rocket以零编程开销为您实现了这一点。更重要的是,Rocket的请求处理是自包含的(self-contained
),没有全局状态:处理程序是带有常规参数的常规函数
。不应该强迫做出决定。
模板、序列化、会话以及其他几乎所有的东西都是可插拔的、可选的组件。虽然Rocket对这些功能都有官方支持和库,但它们是完全可选和可交换的。
这三个想法决定了Rocket的界面,你会发现它们都嵌入到了Rocket的核心功能中。
1、Quickstart
在开始编写Rocket应用程序之前,需要安装Rust工具链。我们建议使用rustup。如果您没有安装Rust,并且需要额外的指导,请参阅getting-started部分。
Running Examples
开始试验Rocket的绝对最快的方法是克隆Rocket存储库并运行examples/
目录中包含的示例。例如,下面的一组命令运行hello示例:
git clone https://github.com/SergioBenitez/Rocket
cd Rocket
git checkout v0.5-rc
cd examples/hello
cargo run
在examples/
目录中有许多示例。它们都可以用cargo run
。
例子的
Cargo.toml
文件将指向本地克隆的rocket
库。在复制示例供您自己使用时,您应该按入门指南中所述修改Cargo.toml
2、升级
与Rocket v0.4相比,Rocket v0.5带来了许多新特性和改进。Rocket v0.5还包含了许多改进,这些改进提高了框架和其中编写的应用程序的总体可用性、稳定性和安全性。虽然Rust编译器可以指导您完成许多这些更改,但其他更改需要特别注意。本指南的目的是指导您完成这些更改以及更多更改,将您的Rocket应用程序迁移到0.5,并从新特性和改进中获益。
本指南的目的不是取代CHANGELOG,而是补充。对于所有希望将其应用程序迁移到Rocket v0.5的开发人员来说,CHANGELOG应该被认为是必读的。
注意:不要惊慌!
简单地将Rocket的版本字符串升级到0.5
系列将导致许多rustc
编译器错误。但不要让这个困扰你!绝大多数的更改都是简单的重命名和#[async_trait]
属性,它们会导致一连串的错误。因此,解决一个顶级问题(通常需要最小的、微不足道的更改)通常可以一次性解决许多错误。
2.1 Crate Organization
Rocket v0.5整合了改进的模块结构和板条箱生态系统。已移动或删除的模块和项将触发编译器错误。我们鼓励用户在CHANGELOG或API文档中搜索v0.5模拟。除了与异步I/O不兼容之外,所有以前存在的功能都在v0.5中可用。
2.2 默认关闭 Secrets
以前默认启用的private-cookies
crate特性已重命名为secrets
,默认禁用。如果您使用的是私有cookie,您必须在Cargo.toml
中启用secrets
功能:
[dependencies]
rocket = { version = "=0.5.0-rc.3", features = ["secrets"] }
2.3 Contrib 弃用
rocket_contrib
crate已弃用,与Rocket 0.5完全不兼容。rocket_contrib
的所有用户必须:
- 删除对
rocket_contrib
的所有依赖和引用。 - 要获得模板支持,请依赖新的rocket_dyn_templates crate。
- 对于数据库池,依赖于新的rocket_sync_db_pools和/或rocket_db_pools crate。
- 必要时启用rocket中的特性。
[dependencies]
- rocket = "0.4"
- rocket_contrib = { version = "0.4", features = ["json"], default-features = false }
+ rocket = { version = "=0.5.0-rc.3", features = ["json"] }
+ rocket_dyn_templates = { version = "=0.1.0-rc.3", features = ["tera"] }
注意:
rocket_dyn_templates
(and co.)不遵循rocket
crate的版本锁定步骤。
这是有意为之。crate 依赖于许多外部依赖项,这些依赖项可能以不同于Rocket本身的速度发展。允许它们的版本分离,可以在不破坏Rocket本身的情况下保持依赖关系的最新。
以前在rocket_contrib
中的所有功能都可用。有关详细信息,请参阅CHANGELOG的贡献毕业部分。
2.4 Stable and Async Support
Rocket v0.5在Rust stable上编译和构建完全异步核心。我们鼓励你:
- 为生产构建切换到Rust稳定发布通道。
- 删除之前需要的
#![feature(..)]
crate属性。
所有申请作者必须(must):
- 使用
rocket::build()
代替rocket::ignite()
。 - 使用
#[launch]
或#[rocket::main]
异步入口属性。 - 使用任何阻塞I/O的
async
版本或在另一个线程中执行它。
应用程序作者可以(may): - 更倾向于通过
use
而不是#[macro_use]
显式导入宏。
本节的其余部分将详细描述如何进行这些更改。
2.5 Stable Release Channel
如果你喜欢使用Rust的稳定发布通道,你可以使用rustup
切换到它:
## switch globally
rustup default stable## switch locally
rustup override set stable
使用稳定发布通道可确保在升级Rust编译器或Rocket时不会发生破坏。话虽如此,Rocket继续利用只有夜间频道才有的功能。因此,在可预见的未来,夜间的开发体验将更加优越。例如,nightly
编译器的诊断更详细和准确:
我们的建议是在夜间通道上进行本地开发,而在稳定通道上构建和部署生产。
2.6 Feature Attribute
作为对稳定发布通道的支持,Rocket应用程序不再需要启用任何要使用的特性。你应该删除任何#[feature(..)]
crate属性:
- #![feature(proc_macro_hygiene, decl_macro)]
-#[macro_use] extern crate rocket;fn main() { .. }
3、入门指南(Getting Started)
让我们创建并运行第一个Rocket应用程序。我们将确保安装了一个兼容的Rust工具链,创建一个依赖于Rocket
的新Cargo项目,然后运行应用程序。
3.1 安装 Rust
Rocket使用了最新的Rust特性。因此,我们需要最新的Rust版本来运行Rocket应用程序。如果您已经安装了最新的Rust编译器,可以直接跳到下一节。
要安装最新版本的Rust,我们建议使用rustup
。按照其网站上的说明安装rustup
。安装rustup后,通过运行命令确保安装了最新的工具链
rustup default stable
注意:您可能更喜欢使用 nightly 通道进行开发。
使用Rocket开发时,每晚的Rust工具链可以改善某些开发人员体验,例如更好的编译时诊断。您可以选择在夜间频道上进行开发,以利用这些改进的体验。请注意,所有的Rocket特性都可以在所有Rust通道中使用。
要将nightly工具链设置为默认值,请运行rusetup default nightly
。
3.2 Hello, world!
让我们编写第一个Rocket应用程序!首先创建一个新的基于二进制文件的Cargo项目,并切换到新目录:
cargo new hello-rocket --bin
cd hello-rocket
现在,将Rocket作为依赖项添加到Cargo.toml
中:
[dependencies]
rocket = "=0.5.0-rc.3"
警告:开发版本必须是git依赖项。
带有-dev
标记的开发版本没有发布。要依赖于Rocket的开发版本,您需要指向Cargo.toml
到Rocket git存储库。例如,将######
替换为git提交散列:
[dependencies] rocket = { git = "https://github.com/SergioBenitez/Rocket", rev = "######" }
修改src/main.rs
。这样它就包含了Rocket Hello, world!
应用程序,如下:
#[macro_use] extern crate rocket;#[get("/")]
fn index() -> &'static str {"Hello, world!"
}#[launch]
fn rocket() -> _ {rocket::build().mount("/", routes![index])
}
我们现在不会详细解释这个程序的功能;我们把这个留到指南的其余部分。简而言之,它创建一个index
路由,在/
路径上挂载该路由,然后启动应用程序。用cargo run
编译并运行程序。您应该看到以下内容:
> cargo run
Rocket 框架基础相关推荐
- Rust - Rocket框架 -基础入门
Roket官网 官方是english文档,看的很累~ 新建项目 cargo new 项目名 --bin Cargo.toml [dependencies] rocket = "0.5.0-r ...
- Spring3.2.0-mybatis3.2.0 基于全注解搭建的后台框架-基础版
2019独角兽企业重金招聘Python工程师标准>>> 摘要: Spring3.2.0-mybatis3.2.0 基于全注解搭建的后台框架-基础版 没有什么不可能 之前一直用的是自 ...
- python学习框架图-Python学习---Python的框架基础学习
框架基础 框架实质: 所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端 B/S结构的响应: import socket def handle_requ ...
- 《Android的设计与实现:卷I》——第2章 框架基础JNI
第2章 框架基础JNI JNI(Java Native Interface,Java本地接口)是Java平台上定义的一套标准的本地编程接口.JNI允许Java代码与本地代码互操作,即Java代码可以调 ...
- python前端学习-------Flask框架基础(建议收藏)
Flask框架基础 下载并安装Flask框架 Flask基础 第一个Flask应用 开启调试模式 路由 变量规则 构造URL HTTP方法 模板 语法格式 模板变量 控制结构 条件控制语句 `if` ...
- data spring 指定时区_Spring 框架基础(05):Mvc架构模式,执行流程详解
本文源码:GitHub || GitEE 一.SpringMvc框架简介 1.Mvc设计理念 MVC是一种软件设计典范,用一种业务逻辑.数据.界面显示分离的方法组织代码,将业务逻辑聚集到一个组件里面, ...
- php 框架获取服务器,Thinkphp 框架基础之源码获取、环境要求与目录结构分析
本文实例讲述了Thinkphp 框架基础之源码获取.环境要求与目录结构.分享给大家供大家参考,具体如下: 获取ThinkPHP 获取ThinkPHP的方式很多,官方网站(http://thinkphp ...
- 一.Spring框架基础
JAVAEE框架之Spring 一.Spring框架基础 Spring:春天:轻量级的企业级开发框架,核心是IOC(控制反转)和AOP(面向切面编程). 官网:spring.io Spring–> ...
- java ibatis 获取执行的sql_小程序官宣+JAVA 三大框架基础面试题
每天给你诚意满满的干货 虽然每天都会写代码,但编程语言里有太多知识点,许多知识长时间不用就会忘记,在我们要去参加面试或是其它一些场景下,需要做些题来查缺补漏.我在搜索过程中发现没有太好的刷题小程序,所 ...
- (转)Hibernate框架基础——一对多关联关系映射
http://blog.csdn.net/yerenyuan_pku/article/details/52746413 上一篇文章Hibernate框架基础--映射集合属性详细讲解的是值类型的集合(即 ...
最新文章
- java 冒泡排序和快速排序 实现
- 基于jQuery的图片异步加载和预加载实例
- 【最新合集】编译原理习题(含答案)_8-10语法制导翻译_MOOC慕课 哈工大陈鄞
- 设置Spring 3开发环境
- 有关输出图形的代码,我觉得好难啊,好蒙啊。
- Hihocoder 1632 : Secret Poems 思维|技巧
- linux十大证书,验证Linux上的X.509证书
- 嵌入式Linux入门11:应用层编程应用和分类
- 【java】线程的简单使用以及注意的问题
- qcow2、raw、vmdk等镜像格式
- react中的核心概念
- 面向对象19:内部类
- Python编写:好友管理系统
- 最简单的正交试验教程
- python设计查询余额程序_Python 小案例实战 —— 简易银行存取款查询系统
- 计算机原理加法指令流程图,加法器电路设计方案汇总(八款模拟电路设计原理详解)...
- flutter 斗音页面
- 2022款Thinkphp家政上门预约系统-全开源系统源码
- 一个炫酷的二维码生成项目附源码
- UE4实时渲染基础及深入探究
热门文章
- 图集:十大最不可思议的计算机
- taoism 0.0.0.7发表了,增加了hash功能,附加了两个demo
- tensorflow卷积神经网络-【老鱼学tensorflow】
- ZYNQ开发(四)Linux文件系统及文件操作命令
- 计算机设备和办公设备,办公设备
- ACM训练日记—4月27日(省赛练习2)
- 2019年_BATJ大厂面试题总结-贝壳篇
- ionic4连接mysql_Ionic4 SQLite插件-数据库 SQLite - Ionic Native
- 人工智能培训培养出来的AI人才怎么样?
- SQL Server代理警报