那麽昨天既然讲完了 get
那麽今天就来 post 一下
为了做到後端的功能 所以本次会以 Json 为传输格式
在 Rust 中有一个名为 serde 的框架能够将资料序列化或是反序列化
那麽序列化就是存在於记忆体的资料保存下来的操作
像是使用 Struct 就是一种方式,又或者说将 Struct 转换成 Json 也是一种将序列化的形式
反序列化 则反 就是转换成现在使用的形式
那麽 当使用 serde 时需要在 struct 上方标记 #[derive(Serialize, Deserialize)]
Serialize 就是序列化的英文 Deserialize 是反序列化的英文
那麽记得要 extern crate serde
并且 use serde::{Serialize, Deserialize};
在 Rocket 中 post 的用法会是像是
#[post("/get_in")]
fn inside() {
}
这样
那 基本上不可能会不带参数
所以我们这里以 Json 为例
#[derive(Serialize, Deserialize)]
struct User {
username: String,
password: String,
}
#[post("/get_in", format = "json", data = "<user>")]
fn inside(user: rocket::serde::json::Json<User>) {
}
可以看到说上面是 struct 主要用来接收 Json
要记得的是
post 的 json 内容一定要跟上面 struct 的格式一样
我不确定其他套件是不是也要这样
然後 後面 data 指向打算要传入的变数名称
那麽由於我是使用 Rocket 他的测试版 所以是无法使用一个名为
rocket_contrib 的套件的
那麽上面我写的例子其实是跑不起来的
因为 Json 这个是 Rocket 中的一个 feature
rocket = { version = "0.5.0-rc.1", features = ["json"] }
serde = "1.0.130"
我们的 Cargo.toml 档案应该会长这样
那麽实际运用看看吧
use rocket::serde::json::Json;
#[derive(Serialize, Deserialize)]
pub struct User {
username: String,
student_id: String,
path: i32,
}
#[post("/get_in", format = "json", data = "<user>")]
fn inside(user: Json<User>) -> Json<User> {
let username = user.username.clone();
let student_id = user.student_id.clone();
let path = user.path.clone();
Json(User{
username,
student_id,
path
})
}
上面的话我构造了一个函数 并且会传入 Json
这边的话有一个 Struct 技巧我有少讲
就是如果说你设定的变数跟 Struct 里头元素的名称一样时
可以直接填入
OK 那我们可以看到上面的 因为传回来的资料还是具有所有权
所以我们直接 clone 下来
并且回传一个一样的 Json 回去
好 我们先 cargo run 起来
这边使用 IDEA 的工具测试
POST http://localhost:8000/get_in
Content-Type: application/json
{
"username": "SFeather",
"student_id": "910629",
"path": 5
}
可以看到 这样就成功传入了
那麽测试完之後 如果想要回传状态码
Rocket 也有内建
use rocket::http::Status;
然後将下方回传值部份改成
Status::Accepted
好 今天就到这边 明天我们来实做一下
<<: Day 17 - 成长曲线N+1 : AIGO教练培训
>>: 【Day 14】List Comprehension 列表生成式
Angular 提供了 i18n 功能让我们开发专案时可以让我们的专案应在不同的国家中被使用,Loc...
随着专案前端、後端等等各个架构与部署都准备完成,Side project 就差最後一步骤,将自己或别...
在 Javascript 中会用 onclick, onchange...等方式监听 DOM 物件,...
看过的故事有好多 有的很悲 有的很爱 但对於自己 像是吃的午饭 又吐了一半 在这战场 还是不太习惯...
前面两天从 TCP 在做什麽开始聊起,今天来看看另外一个也很重要的协定 UDP。 UDP 为 Use...