Rust Cookbook(译):使用Rust进行Web开发(第九章)

我们将在本章中介绍以下配方:

  • 设置Web服务器
  • 创建端点
  • 处理JSONRequests
  • 构建自定义错误处理程序
  • 托管模板

介绍

Rust提供了许多软件包,允许开发人员使用它来启动Web服务器,Rust是内存,安全和速度具有重要意义的Web项目的理想选择。

在本章中,我们将使用Rust中的nickel,这是Rust中的Web应用程序框架,并提供在Rust中构建Web应用程序所需的所有基本单元。 基本单元包括设置Web服务器,处理Web请求等。 我们将专注于nickel为我们在Rust中创建Web应用程序提供的不同宏和类型。

设置Web服务器

在本文中,您将了解可以将nickel安装到Rust项目中的步骤,并了解用于启动Web服务器的命令,您可以在其中托管Web应用程序。

做好准备

在我们继续生成Web服务器之前,我们必须安装以下nickel 。 按照给定的步骤下载并设置nickel 项目:

1.我们将要求Rust编译器和任何文本编辑器来开发Rust代码片段。
2.使用Cargo工具创建Rust项目并输入新创建的项目:

cargo new --bin nickel-demo && cd nickel-demo

在这里插入图片描述

3.在您喜欢的文本编辑器中打开Cargo.toml文件,并进行以下屏幕截图中显示的修改。 在这里,我们使用nickel ,它在依赖项字段中输入:
Rust Cookbook(译):使用Rust进行Web开发(第九章)_第1张图片

4.使用以下命令在项目中安装包:

cargo build

Rust Cookbook(译):使用Rust进行Web开发(第九章)_第2张图片

怎么做…

按照给定的步骤实现此配方:
1.在首选文本编辑器中打开src目录中的main.rs文件。
2.使用相关信息编写代码头:

//-- #########################
//-- Task: Starting a simple hello world nickel web app
//-- Author: Vigneshwer.D
//-- Version: 1.0.0
//-- Date: 20 April 17
//-- #########################

3.使用extern关键字导入已安装的nickel:

#[macro_use] extern crate nickel;
use nickel::Nickel;

4.定义我们声明服务器实例的主要功能:

fn main() {
let mut server = Nickel::new();
server.utilize(router! {
get "**" => |_req, _res| {
"Hello world!"
} }
);
server.listen("127.0.0.1:6767");
}

5.使用以下命令从项目的根目录中保存文件并启动服务器:

cargo run

我们将在终端中成功执行代码时得到以下输出:
在这里插入图片描述

打开您最喜欢的浏览器并重定向到http://127.0.0.1:6767/以获得以下输出:
Rust Cookbook(译):使用Rust进行Web开发(第九章)_第3张图片

怎么运行的…

在这个配方中,我们创建了一个名为nickel-demo的Rust项目,它帮助我们使用镍网应用程序箱生成Web服务器。

从顶部开始,我们使用extern关键字引用外部nickel,并使用#[macro_use]加载其所有宏。 nickel是应用对象和表面,包含所有公共API; 它是一个结构,它实现了执行所有Web应用程序任务的所有基本方法。 在main函数中,我们首先将服务器实例分配给一个可变变量,并使用Nickel :: new()创建一个新的nickel应用程序对象,该对象创建一个具有默认错误处理的nickel实例。

接下来,我们设置了我们使用路由器的端点路由! 当最终用户要求获取请求时,宏监听“”并提供简单消息“Hello world!”。 nickel 或服务器实例的get方法注册用于特定get请求的处理程序。 处理程序分配给路径,允许路径包含变量和通配符; 在我们的情况下,我们有“”处理程序,这是一个通配符条目,并且基本上为任何端点的get请求返回相同的响应。 通过此API添加的处理程序将附加到默认路由器。 双管字符表示Rust中的闭包; 这是我们的请求和响应参数所在的位置,在我们的应用程序中是_req和_res。 从根本上说,有一些结构包含请求和响应数据。

使用server.utilize方法,我们将端点添加到服务器实例并注册处理程序,该处理程序将在每个请求之前在其他处理程序中调用。 server.listen方法侦听127.0.0.1:6767上的API请求,它绑定并侦听给定主机和端口上的连接。

创建端点

在本文中,您将了解将nickel安装到Rust项目中的步骤。 您还将学习我们可以在Web应用程序中创建自定义端点的命令,这些命令将显示应用程序最终用户访问的不同消息。

做好准备

在我们继续生成Web服务器之前,我们必须安装以下nickel 。 按照给定的步骤下载并设置项目的nickel :1.我们将要求Rust编译器和任何文本编辑器来开发Rust代码片段。2.使用Cargo工具创建Rust项目并输入新创建的项目:

cargo new --bin nickel-routing && cd nickel-routing

在这里插入图片描述
3.在您喜欢的文本编辑器中打开Cargo.toml文件,并进行以下屏幕截图中显示的修改。 在这里,我们使用nickel,它在依赖项字段中输入:
Rust Cookbook(译):使用Rust进行Web开发(第九章)_第4张图片

4.使用以下命令在项目中安装包:

cargo build

此命令将在您的Rust中安装nickel 的所有依赖项项目。

怎么做…

请按照以下步骤实现此配方:
1.在首选文本编辑器中打开src目录中的main.rs文件。
2.使用相关信息编写代码头:

//-- #########################
//-- Task: Routing using nickel
//-- Author: Vigneshwer.D
//-- Version: 1.0.0
//-- Date: 20 April 17
//-- #########################

3.使用extern关键字导入已安装的nickel:

#[macro_use] extern crate nickel;
use nickel::{Nickel, HttpRouter};

4.定义我们声明服务器实例的主要功能:

fn main() {
let mut server = Nickel::new();
server.get("/bar", middleware!("This is the /bar
handler"));
server.get("/user/:userid", middleware! { |request|
format!("This is user: {:?}", request.param("userid"))
});
server.get("/a/*/d", middleware!("matches /a/b/d but
not /a/b/c/d"));
server.get("/a/**/d", middleware!("This matches /a/b/d
and also /a/b/c/d"));
server.listen("127.0.0.1:6767");
}

5.使用以下命令从项目的根目录中保存文件并启动服务器:

cargo run

我们将在终端中成功执行代码时得到以下输出:
Rust Cookbook(译):使用Rust进行Web开发(第九章)_第5张图片

打开您喜欢的浏览器并重定向到以下端点:

输入URL,http://127.0.0.1:6767 / bar:
Rust Cookbook(译):使用Rust进行Web开发(第九章)_第6张图片

输入网址http://127.0.0.1:6767/user/viki:
Rust Cookbook(译):使用Rust进行Web开发(第九章)_第7张图片

输入URL,http://127.0.0.1:6767 / a / b / d / d:
在这里插入图片描述

输入URL,http://127.0.0.1:6767 / a / b / c / d:
Rust Cookbook(译):使用Rust进行Web开发(第九章)_第8张图片

输入URL,http://127.0.0.1:6767 / a / b / d:
Rust Cookbook(译):使用Rust进行Web开发(第九章)_第9张图片

怎么运行的…

在这个配方中,我们创建了一个名为nickel-routing的Rust项目,它帮助我们在Web应用程序中创建多个端点,每个端点显示不同的自定义消息。

从顶部开始,我们使用extern关键字引用外部nickel,并使用[macro_use]加载其所有宏。 我们使用nickel作为应用对象和表面,它包含所有公共API。 它是一个实现执行所有Web应用程序任务的所有基本方法的结构,而HttpRouter是由具有各种REST API调用签名的nickle crate提供的公共特征。

在main函数中,我们首先将服务器实例分配给一个可变变量,并使用Nickel :: new()创建一个新的nickle应用程序对象,该对象创建一个具有默认错误处理的nickle实例。

server.get方法注册用于特定get请求的处理程序。 处理程序分配给路径,允许路径包含变量和通配符。 通过此API添加的处理程序将附加到默认路由器。 中间件! macro减少了每条路径所需的样板代码量。

我们在此配方中创建以下路线:

  • / bar:在点击此端点时,我们收到消息,这是/ bar处理程序。
  • / user /:userid:在点击此端点时,我们收到消息,这是用户:{:?}。这里,参数被替换为get请求中使用request.param(“userid”)命令传递的数据(:userid),其中param是请求结构的方法。
  • / a / * / d:在点击此端点时,我们收到消息,匹配/ a / b / d但不是
  • /A B C D。 这里的星号只允许一个中间路径。
  • / a / ** / d:在点击此端点时,我们收到一条消息:这与/ a / b / d相匹配
  • /A B C D。 这里的星号只允许两个中间路径。

路由可以像/ foo一样简单,使用参数,通配符,甚至是双通配符。

server.listen方法侦听127.0.0.1:6767上的API请求,它绑定并侦听给定主机和端口上的连接。

你可能感兴趣的:(rust_cookbook)