1 个不稳定版本
0.1.0 | 2023 年 5 月 4 日 |
---|
#1319 在 HTTP 服务器
46KB
862 行
卡坦是用于向服务器发出请求的。已经存在许多这样的库。为什么选择这个呢?
- 包含所有必要的组件。无需设置 Hyper + Serde + Bytes + 等(再次)。
- 可以从响应中自动保存cookie等,这有助于登录,然后发出后续请求。
- 可以在发出多个请求之前预先设置使用头、查询 URL、cookie。
这还是一个早期的工作。
lib.rs
:
卡坦是一个用于编写服务器响应的库。
- 你可以在测试中启动一个
Server
。 - 创建将对其运行的请求。
- 检索它们返回的内容。
- 断言响应如你所期望的那样工作。
它内置了对 Serde、Cookies 和其他常用 crate 的支持,用于处理 Web。
入门指南
本质上;创建你的 Axum 应用程序,创建一个 Server
,然后对其发出请求。
use ::axum::Router;
use ::axum::extract::Json;
use ::axum::routing::put;
use ::axum_test::Server;
use ::serde_json::json;
use ::serde_json::Value;
async fn put_user(Json(user): Json<Value>) -> () {
// todo
}
let my_app = Router::new()
.route("/users", put(put_user))
.into_make_service();
let server = Server::new(my_app)
.unwrap();
let response = server.put("/users")
.json(&json!({
"username": "Terrance Pencilworth",
}))
.await;
功能
自动保存 Cookie 🍪
当你启动一个 Server
时,你可以开启一个功能来自动保存请求之间的 cookie。这用于自动保存像会话 cookie 这样的东西。
use ::axum::Router;
use ::axum_test::Server;
use ::axum_test::ServerConfig;
let my_app = Router::new()
.into_make_service();
let config = ServerConfig {
save_cookies: true,
..ServerConfig::default()
};
let server = Server::new_with_config(my_app, config)
.unwrap();
然后当你发出一个请求时,任何返回的 cookie 都将被用于下一个请求。这是基于服务器的(它不会跨服务器保存)。
你可以通过使用 `Request::do_save_cookies' 和 `Request::do_not_save_cookies' 来在每个请求上打开或关闭此功能。
内容类型 📇
在进行请求时,它将没有任何内容类型。
你可以通过在 ServerConfig
中设置 default_content_type
来设置所有 Request
对象使用的默认类型。在创建 Server
实例时使用 new_with_config
。
use ::axum::Router;
use ::axum_test::Server;
use ::axum_test::ServerConfig;
let my_app = Router::new()
.into_make_service();
let config = ServerConfig {
default_content_type: Some("application/json".to_string()),
..ServerConfig::default()
};
let server = Server::new_with_config(my_app, config)
.unwrap();
如果没有默认设置,则一个 Request
会尝试猜测内容类型。例如,在调用 Request::json
时设置 application/json
,在调用 Request::text
时设置为 text/plain
。这将不会覆盖任何提供的默认内容类型。
最后,在每次 Request
中,可以通过调用它上的 Request::content_type
来设置要使用的内容类型。
use ::axum::Router;
use ::axum::extract::Json;
use ::axum::routing::put;
use ::kantan::Server;
use ::serde_json::json;
use ::serde_json::Value;
async fn put_user(Json(user): Json<Value>) -> () {
// todo
}
let my_app = Router::new()
.route("/users", put(put_user))
.into_make_service();
let server = Server::new(my_app)
.unwrap();
let response = server.put("/users")
.content_type(&"application/json")
.json(&json!({
"username": "Terrance Pencilworth",
}))
.await;
快速失败
这个库被编写成快速崩溃。例如,默认情况下,一个响应将假设成功,并在它们不成功时崩溃(你可以更改它)。默认情况下,获取cookie和头部的函数如果找不到将崩溃。
这种行为对于Rust来说是不常见的,然而它是故意的,以便于编写测试。当你想要测试尽快失败,并跳过编写错误处理代码时。
依赖项
~6–18MB
~190K SLoC