8个版本 ()
1.0.1-alpha | 2024年1月24日 |
---|---|
0.3.0-alpha | 2023年12月3日 |
0.2.0-alpha | 2023年12月3日 |
0.1.3-alpha | 2023年12月3日 |
#22 in #thread-pool
每月85次下载
375KB
963 行
m_server
一个超级最小化的用于传输JSON数据的HTTP服务器框架;用Rust编写。
入门指南
以下是一个创建服务器和路由的超级基本示例。
use m_server::{
server::HttpServer,
http::{
response::HttpResponse,
request::{HttpRequestMethod, HttpRequest},
}
};
// must be in the IP:PORT format!
const BIND_ADDR: &str = "127.0.0.1:7878";
// thread pool size for route handling (default is 12)
const POOL_SIZE: usize = 30;
fn get_person(request: &mut HttpRequest) {
let json_data = "
{
\"name\": \"John Doe\",
\"age\": 22
}";
request.respond_with_body(&HttpResponse::ok(), json_data)
}
fn main() {
// creating a new HttpServer will instantly attempt to bind to the IP:PORT
let mut http_server: HttpServer = HttpServer::new(self::BIND_ADDR).set_pool_size(POOL_SIZE);
http_server.add_route(HttpRequestMethod::Get, "/fort", get_person);
// It is recommended to define the handlers in Controllers, rather than inline.
http_server.add_route(HttpRequestMethod::Get, "/person", |http_request| {
let json_data = "
{
\"name\": \"John Doe\",
\"age\": 22,
}";
match &http_request.body.body_params {
Some(params) => {
let wanted_param = "required param";
let msg_opt = params.get(wanted_param);
let msg;
match msg_opt {
Some(message) => msg = message.clone(),
None => {
http_request.respond_with_body(&HttpResponse::bad_request(), "Missing parameter!");
return;
}
}
http_request.respond_with_body(&HttpResponse::created(), &msg);
},
None => http_request.respond_with_body(&HttpResponse::created(), json_data)
}
});
// example of responding without body
http_server.add_route(HttpRequestMethod::Delete, "/person/{person_id}/settings", |http_request| {
http_request.respond(HttpResponse::ok());
});
// example of responding without body
http_server.add_route(HttpRequestMethod::Post, "/person", |http_request| {
http_request.respond(HttpResponse::ok());
});
// now the server can start, this is sync, hence why routes are created before start
http_server.start();
}
依赖关系
~6–14MB
~159K SLoC