Rocket 框架基础

2023-10-27

Rocket v0.5 DOC
Rocket是Rust的一个web框架,它使编写快速、安全的web应用程序变得简单,而不会牺牲灵活性、可用性或类型安全性。

  • 类型安全
    从请求到响应,Rocket确保您的类型有意义。
  • 样板免费
    把时间花在编写真正重要的代码上,让Rocket生成其余的代码。
  • 容易使用
    简单,直观的api使Rocket平易近人,无论你的背景如何。
  • 可扩展
    创建任何Rocket应用程序都可以使用的自己的一等(first-class)原语。

简介

Rocket是Rust的web框架。如果你愿意,你可以把Rocket想象成一个更灵活、更友好的RailsFlaskBottleYesod的混合体。我们更愿意把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的所有用户必须:

[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
									
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Rocket 框架基础 的相关文章

随机推荐

  • Python官方中文文档上线,Pythoner快收藏福利!

    参加 2019 Python开发者日 请扫码咨询 编辑 suiling 出品 Python大本营 ID pythonnews 各位学 Python 的小伙伴们马上就要到激动人心的时刻了 因为 因为 Python 官方中文文档上线了 不仅有
  • 量化交易之QT篇 - 设置窗口大小、标题、icon(画背景图片)

    MainScens h ifndef MAINSCENS H define MAINSCENS H include
  • 命令指示符操作

    1 复制操作 选中 enter键
  • js中大括号{}的遍历每一项操作

    话不多说直接上例子 循环遍历每一项
  • 分布式数据库 Join 查询设计与实现浅析

    相对于单例数据库的查询操作 分布式数据查询会有很多技术难题 本文记录 Mysql 分库分表 和 Elasticsearch Join 查询的实现思路 了解分布式场景数据处理的设计方案 文章从常用的关系型数据库 MySQL 的分库分表Join
  • Docker大纲

    Docker Docker 概述 Docker 安装 Docker 命令 容器命令 镜像命令 操作命令 Docker 操作 Docker 容器数据卷 DockerFile Docker 网络原理 Idea整合Docker Docker Co
  • Brew下载慢解决办法

    在利用brew install xxx进行软件安装的时候 brew会把临时的下载文件放在cache目录下 可以通过 brew cache 查看下载的缓存目录 默认的缓存目录为 Users Library Caches Homebrew Ca
  • 围绕开源的系列思考——国家篇

    点击上方 开源社 关注我们 作者 庄表伟 编辑 陈梅梅 责编 Corrie 从穿越小说聊起 我非常喜欢看各种网络小说 其中最大的一类 自然是穿越小说 其中又可以细分为很多类型 按照穿越回到的时代 从远古到近现代的都有 这其中有一个很小的分类
  • 记一次JVM Full GC 引发的线上故障,真是坑!

    这篇文章给大家聊一次线上生产系统事故的解决经历 其背后代表的是线上生产系统的JVM FullGC可能引发的严重故障 一 业务场景介绍 先简单说说线上生产系统的一个背景 因为仅仅是文章作为案例来讲 所以弱化大量的业务背景 简单来说 这是一套分
  • MIPI D-PHY的校准测试

    MIPI的校准环节类似于DDR中的读写训练 其目的都是为了满足最佳的眼图采样时刻 因此 在系统的传输速率很高 通道之间存在延时 设计中有外部干扰等等影响因素的时候 信号抖动将会被增强 此时 校准将对长时间的稳定运行起到关键的补偿作用 在MI
  • 2021年常见web前端面试题

    1 Vue实现数据双向绑定的原理是什么 2 这些年解决过那些困难问题 3 平时通过什么途径提升自己 4 vue响应式原理 5 prosy的优缺点 6 怎样监听数组 7 计算属性和watch的区别 8 vueX简述 9 vuex可以做什么 1
  • node-xlsx - 简单几行代码处理导入、导出 excel 表格数据,免费开源的 javascript 工具库

    最近开发的项目上需要把数据导出为 xlsx 文档 找了一圈 发现 node xlsx 简单好用 分享给各位 关于 node xlsx 在 web 开发中 管理后台生成 excel 报表并且下载 一个很常用的功能 很多 javascript
  • 【LeetCode】1812. 判断国际象棋棋盘中一个格子的颜色

    题目描述 给你一个坐标 coordinates 它是一个字符串 表示国际象棋棋盘中一个格子的坐标 下图是国际象棋棋盘示意图 如果所给格子的颜色是白色 请你返回 true 如果是黑色 请返回 false 给定坐标一定代表国际象棋棋盘上一个存在
  • 测试发布

    基于docker的构建
  • 新手教程07:集成电路中的功耗分析

    前言 一 数字芯片的功耗定义 动态功耗 静态功耗 二 如何降低功耗 2 1 降低动态功耗 2 2 降低静态功耗 总结 前言 零基础初学数字IC 学会什么写什么 与大家一起进步 最近面试过程中经常被问到有关功耗的问题 回答的不是很好 所以本篇
  • 搭建属于自己的私有链,部署简单的智能合约

    ubuntu 17 10安装 sudo apt upgrade y sudo apt install software properties common sudo add apt repository y ppa ethereum eth
  • ARP欺骗的各种玩法

    ARP欺骗 定义 ARP欺骗 英语 ARP spoofing 又称ARP毒化 ARP poisoning 网络上多译为ARP病毒 或ARP攻击 是针对以太网地址解析协议 ARP 的一种攻击技术 通过欺骗局域网内访问者PC的网关MAC地址 使
  • mysql存储过程switch_MySQL存储过程详解

    1 存储过程简介 我们常用的操作数据库语言SQL语句在执行的时候需要要先编译 然后执行 而存储过程 Stored Procedure 是一组为了完成特定功能的SQL语句集 经编译后存储在数据库中 用户通过指定存储过程的名字并给定参数 如果该
  • SpringBoot统一功能处理

    目录 SpringMVC统一处理的三种方式 1 基于SpringMVC的配置类扩展 1 添加路径前缀 2 添加拦截器 2 统一的响应数据格式封装 3 统一异常处理 基于SpringAOP已经实现统一功能增强 但如果希望对Controller
  • Rocket 框架基础

    Rocket v0 5 DOC Rocket是Rust的一个web框架 它使编写快速 安全的web应用程序变得简单 而不会牺牲灵活性 可用性或类型安全性 类型安全 从请求到响应 Rocket确保您的类型有意义 样板免费 把时间花在编写真正重
Powered by Hwhale