云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

域名交易_抖音服务器_限量秒杀

小七 141 0

云计算云存储_如何租用_云计算数据安全

自从我们上一次在2015年对其进行研究以来,锈病的发展势头强劲。像亚马逊和微软这样的公司已经在越来越多的用例中采用了它。例如,大数据 数据分析,微软赞助了GitHub上的Actix项目,这是一个基于Rust的通用开源actor框架。Actix项目还维护了一个restfulapi开发框架,它被广泛认为是一个快速和高性能的web框架。尽管该项目在2020年初被暂时搁置,但项目所有权已转移到新的维护者手中,阿里大数据,开发仍在继续。在本文中,我们将通过编写一个小型的crudapi来探索actixwebweb框架。我们的API将由一个使用Diesel的Postgres数据库支持。最后,我们将使用Auth0为我们的API实现身份验证。入门第一步是安装铁锈和所有相关工具。社区支持的方法使用的是Rustup,所以我们将在本教程中使用这个方法。此处提供安装说明。在安装期间,选择默认选项(该选项应修改$PATH以包含货物安装目录)。然后我们将使用Cargo初始化一个空项目:cargo init—bin rust blogpost身份验证异步这将创建一个具有给定名称和一些文件的目录。让我们打开货物.toml文件并进行编辑以添加我们需要的所有包,文件应如下所示:【套餐】name="rust blogpost auth async"版本="0.1.0"作者=姓氏"]版本="2018"[依赖项]actix web="2.0.0"actix web httpauth={git="https://github.com/actix/actix-web-httpauth" }chrono={version="0.4.10",features=serde"]}导出_more="0.99.2"diesel={version="1.4.2",features=postgres,"uuidv07",上云,"r2d2","chrono"]}dotenv="0.15.0"期货="0.3.1"r2d2="0.8.8"serde="1.0"serde_derive="1.0"serde_json="1.0"actix服务="1.0.1"酒精含量="1.0.0"reqwest="0.9.22"actix rt="1.0.0"我们将解释为什么我们需要这些依赖关系。Rust最近实现了两个新特性,我们将在这个应用程序中看到这些特性。如所示货物.toml,数据与大数据技术,我们使用的是2018版的Rust,它允许我们在项目中使用这两个特性。设置API在本教程中,我们将构建一个具有单一资源的API。我们的API应该能够创建给定JSON输入的新用户、显示给定用户的用户id、按给定id删除以及列出所有用户。因此,我们将有以下端点:GET/users-返回所有用户GET/users/{id}-返回具有给定id的用户POST/users-接受一个JSON负载并基于它创建一个新用户DELETE/users/{id}-删除具有给定id的用户货物会造成赤骨主要单位:卢比为我们归档。让我们编辑它并添加依赖项,如下所示。目前,我们只依靠actix_网箱。//src公司/主要单位:卢比使用actix_web::{web,App,HttpServer};我们将在应用程序中创建四个不同的路由来处理前面描述的端点。为了使代码组织良好,我们将它们放在一个名为handlers的不同模块中并在中声明主要单位:卢比。我们将在下一节中定义此模块。在前面的行下面主要单位:卢比,我们将添加以下内容:mod处理程序;现在,我们的主要功能(应用程序的主要入口点)如下所示://src公司/主要单位:卢比//此处的依赖项//此处声明模块#[活动::主]async fn main()->std::io::Result{std::env::set_var("RUST_LOG","actix_web=debug");//启动http服务器HttpServer::new(move | |{应用程序::新建().route("/users",web::get().to(handlers::get_users)).route("/users/{id}",web::get().to(handlers::get_user_by_id)).route("/users",web::post().to(handlers::add_user)).route("/users/{id}",web::delete().to(handlers::delete_user))}).bind("127.0.0.1:8080")?。运行().等待}这里要注意的第一个重要点是,我们从main返回一个结果类型。这使我们能够使用?运算符,它将关联函数返回的任何错误气泡化到调用方。要注意的第二件事是async/await。这些是语言级构造,它们添加了本机支持,以便将当前线程的控制权交给其他可以在当前线程阻塞时运行的线程。这是前面提到的两个特性,我们之所以能够使用,是因为我们指定了2018版的Rust货物.toml.注意在main函数中使用了注释#[actix_rt::main]。Actix actors需要一个运行时来调度和运行这些actor。这是通过使用actix\rt板条箱实现的。我们使用actix_rt::main属性标记要由actix运行时执行的main函数。在我们的main中,我们实例化一个HttpServer,向它添加一个应用程序,并在本地主机上的给定端口上运行它。我们在应用程序中添加了一些路由处理程序,每个处理程序都指向handlers模块中指定的处理程序函数。下一步是编写handlers模块。它位于另一个名为处理程序.rs。我们将首先从我们的shell创建它:触摸src/处理程序.rs然后,我们可以将以下代码粘贴到该文件中,该文件应如下所示://src公司/处理程序.rs使用actix_web::Responder;pub async fn get_users()->impl响应程序{格式!("get users的您好")}pub async fn get_user_by_id()->impl响应程序{格式!("get users by id你好")}pub async fn add_user()->impl响应程序{格式!("添加用户您好")}pub async fn delete_user()->impl响应程序{格式!("删除用户您好")}正如预期的那样,我们有四个处理函数用于我们的四个路由。其中的每一个都被指定为异步函数,返回在actixweb中实现Responder特性的东西。现在,我们的处理程序很简单;它们只返回一个固定的字符串。我们稍后将修改处理程序以实现与备份数据库的交互。让我们使用cargo运行项目:货物运输已在0.49s内完成dev[unoptimized+debuginfo]个目标运行`target/debug/actix diesel auth`在另一个终端中,我们可以在API编译完成后使用curl来访问它curl 127.0.0.1:8080/用户get用户你好curl-X POST 127.0.0.1:8080/用户来自添加用户的你好连接Postgres数据库处理来自Rust应用程序的数据库交互的最流行的框架是Diesel,它在SQL上提供了一个类型安全的抽象。我们将使用Diesel将API连接到后台Postgres数据库。我们将使用另一个名为R2D2的机箱来进行连接池。让我们修改主要单位:卢比归档并添加更改。与上次一样,我们将从声明依赖项开始://src公司/主要单位:卢比#[宏使用]外部板条箱柴油机;使用actix_web::{dev::ServiceRequest,web,App,Error,HttpServer};使用diesel::前奏::*;使用diesel::r2d2::{self,ConnectionManager};我们将为功能使用单独的模块,以便能够保持关注点的干净分离。因此,我们需要在中声明这些模块主要单位:卢比//src公司/主要单位:卢比mod错误;mod处理程序;模型;mod模式;然后我们为连接池定义一个自定义类型。这一步纯粹是为了方便。如果我们不这样做,我们将需要在以后使用完整的类型签名。//src公司/主要单位:卢比pub type Pool=r2d2::池;我们现在可以开始我们的主要功能了//src公司/主要单位:卢比//此处的依赖项//此处为模块声明//此处为类型声明#[活动::主]async fn main()->std::io::Result{dotenv::dotenv().ok();std::env::set_var("RUST_LOG","actix_web=debug");让database_url=std::env::var("database_url")。expect("必须设置数据库的\u url");//创建数据库连接池let manager=ConnectionManager::::new(数据库\u url);让pool:pool=r2d2::pool::builder().build(管理器).expect("未能创建池。");//启动http服务器HttpServer::new(move | |{应用程序::新建().数据(池.克隆()).route("/users",web::get().to(handlers::get_users)).route("/users/{id}",web::get().to(handlers::get_user_by_id)).route("/users",web::post().to(handlers::add_user)).route("/users/{id}",web::delete().to(handlers::delete_user))}).bind("127.0.0.1:8080")?。运行().等待}自上一个版本以来,最重要的更改是通过.data将数据库连接池传递给每个处理程序(池.克隆())打电话。这使得处理程序函数能够独立地与数据库交互。我们还需要数据库连接信息,这是从一个名为database_URL的环境变量中获取的。我们的main函数尝试获取该变量的值,如果未设置,则中止。因为我们的API总是需要一个备份数据库,这对我们来说是一个不可恢复的错误。我们将使用一个名为.env的文件来加载环境变量。让我们用我们的外壳来创造它触摸环境下一步是将名为DATABASE_URL的环境变量放入文件中。它应该看起来像:目录环境数据库\u URL=postgres://username:password@localhost/auth0\u演示?sslmode=禁用注意注意:在运行下一个命令之前,请确保安装了PostgreSQL。这是在Mac上设置PostgreSQL的一个很好的资源。柴油机需要自己的设置步骤。为此,我们需要从安装diesel CLI开始:cargo install diesel_cli--无默认功能--features postgres注意如果在这里遇到错误,请确保在系统的PATH环境变量中添加了Cargo的bin目录。您可以通过在终端中运行source$HOME/.cargo/env来实现这一点。这里我们告诉diesel只安装postgres特定的配置,因为我们只对PostgreSQL作为数据库感兴趣。Diesel需要自己的配置文件,可以使用CLI生成:柴油机设置此命令将生成名为auth0\u demo的数据库(如果它不存在)。注意创建的新目录migrations。还要注意一个名为柴油机.toml在项目根目录中

,大数据使用