入门

introduction/01-getting_started.md
commit - 9a6be55d3b57c6334239f37505b968ece5eda2c4 - 2021.02.18

为了在 Rust 中构建 web 应用程序,你需要 HTTP 服务器,以及异步运行时。在运行 cargo new --bin web-app 命令后,将如下行添加到 Cargo.toml 文件中:

# 仅为示例,请使用你需要的版本
tide = "0.15.0"
async-std = { version = "1.6.5", features = ["attributes"] }

示例

下面的示例中,将创建 HTTP 服务器,接收 JSON 文本,对其进行验证,并用确认消息进行响应。

use tide::prelude::*;
use tide::Request;

#[derive(Debug, Deserialize)]
struct Animal {
    name: String,
    legs: u8,
}

#[async_std::main]
async fn main() -> tide::Result<()> {
    tide::log::start();
    let mut app = tide::new();

    app.at("/orders/shoes").post(order_shoes);
    app.listen("127.0.0.1:8080").await?;

    Ok(())
}

async fn order_shoes(mut req: Request<()>) -> tide::Result {
    let Animal { name, legs } = req.body_json().await?;
    Ok(format!("Hello, {}! I've put in an order for {} shoes", name, legs).into())
}

执行如下命令:

$ curl localhost:8080/orders/shoes -d '{ "name": "Chashu", "legs": 4 }'

输出如下响应信息:

Hello, Chashu! I've put in an order for 4 shoes

执行如下命令:

$ curl localhost:8080/orders/shoes -d '{ "name": "Mary Millipede", "legs": 750 }'

将没有响应信息,因为数字太大,无法放入目标类型。