1 个不稳定版本

0.1.9 2022年5月29日
0.1.8 2022年5月29日

#20 in #request-headers

MIT/Apache

12KB
213 代码行数(不含注释)

Velen

又一个 REST 框架

如何使用

导入

use velen::server::create_server;
use velen::models::server_models::{Request, Response};

创建服务器实例

let mut server = create_server();

注册端点

server.get("/get", get_handler);
server.post("/add", post_handler);

开始监听

server.listen("127.0.0.1", 3333, server_start_handler);

示例处理程序

fn get_handler(_: Request, mut res: Response) {
    res.set_status_code(200);
    res.set_header("Content-Type", "application/json");
    struct GoodResponse {
        message: String,
    }
    impl Display for GoodResponse {
        fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
            write!(f, "{{\"message\": \"{}\"}}", self.message)
        }
    }
    let good_response = GoodResponse {
        message: "I'm good, thank you very much Sir!".to_string(),
    };
    res.send(good_response.to_string());
}

读取查询参数

req.query_params.get("user_id").unwrap();

读取请求头

req.headers.get("x-custom-header").unwrap();

读取请求体

 /* Velen does not deserialize request payload. Use of Serde is recommended. */

 req.body;

设置响应状态

res.set_status_code(200);

设置响应头

res.set_header("Content-Type", "application/json");

设置响应负载

res.send("{\"status\":\"ok\"}");

限制

  • 未实现 OPTIONS
  • 仅支持 application/json,因此不要尝试上传文件
  • 在发送响应时,必须在任何 set_header 之前调用 set_status_code。这就是实际向客户端发送响应的方式。
  • 无多线程

待办事项

  • 修复上述限制

依赖关系

~2.1–3MB
~53K SLoC