1 个不稳定版本
0.2.0 | 2022 年 3 月 26 日 |
---|---|
0.1.1 |
|
0.1.0 |
|
#112 in #微服务
在 ras_auth 中使用
21KB
505 行
ras-service
构建(非完整)REST 微服务的简单库
crates.io: https://crates.io/crates/ras_service docs.rs: https://docs.rs/ras_service/0.2.0/ras_service
lib.rs
:
构建(非完整)REST 微服务的简单库
Is used async tokio runtime.
要构建运行时,使用方法 "get_runtime"。
要创建执行器,使用方法 "new",借用运行时和服务。
要添加功能,使用函数 "add_get_functions" 和 "add_post_functions"。
函数名是 URL 中的最后一个单词。
签名函数
fn(Handle, Arc, Option<&str>) -> RasResult
必须返回 RasResult::Sync 以进行同步调用,以及 RasResult::Async 以进行异步调用。
Sync 包含 HttpStatus 和答案数据。Async 包含将等待的 JoinHandle。
示例
use ras_service::*;
// Your Service (used for contains resources, as discriptos or data)
// Must be Sync + Send
struct Service {
some_data: String,
}
//Build your constructor here
impl Service {
async fn new() -> Service {
Service {
some_data: "resource".to_string(),
}
}
}
//Sync get function
fn some_test_get(
runtime: Handle,
self_service: Arc<Service>,
params: Option<&str>)
-> RasResult {
let result = if let Some(param_str) = params {
format!(
"Your params: {:#?}",
ras_service::ras_helper::parse_get_params(param_str)
)
} else {
"Empty params".to_string()
};
RasResult::Sync(
HttpStatus::OK,
Some(result)
)
}
//Async post funtion
fn some_test_post(
runtime: Handle,
self_service: Arc<Service>,
query: Option<&str>)
-> RasResult {
let query: HashMap<String, Option<String>> =
if let Some(query_str) = query {
match serde_json::from_str(query_str) {
Ok(query) => query,
Err(err) => {
eprintln!("Error! Bad json format: {:?}", err);
return RasResult::Sync(HttpStatus::BadRequest, None);
}
}
} else {
return RasResult::Sync(HttpStatus::BadRequest, None);
};
let service = self_service.clone();
RasResult::Async(runtime.spawn(async move {
let result = format!("You data: {:?}; Resource: {:?}", query, service.some_data);
(HttpStatus::OK, Some(result))
}))
}
fn main() {
let runtime = RasServiceBuilder::<Service>::get_runtime(4);
let service = runtime.block_on(async {Service::new().await});
RasServiceBuilder::new(runtime, service)
.set_socket_url("127.0.0.1:7878")
.add_get_function("some_test".to_string(), some_test_get)
.add_post_function("some_test".to_string(), some_test_post)
//.run();
;
assert_eq!(1, 1);
}
依赖项
~8–23MB
~327K SLoC