3 个版本 (破坏性更新)
0.3.0 | 2023年6月25日 |
---|---|
0.2.0 | 2023年6月17日 |
0.1.0 | 2023年6月17日 |
#1052 in HTTP 服务器
6KB
actix-web-rest
- 使用 actix-web 构建 RESTful API 的定制的工具包。
该crate包含用于使用 actix-web 加速开发RESTful API的实用工具
rest_error
属性宏
为什么?
⚡ 快速上手!
🧑🎓 学习过程宏。
入门
# Create a new project.
cargo init my_api && cd my_api
# Add actix-web-rest to your project.
cargo add actix-web-rest actix-web anyhow thiserror
然后使用以下内容覆盖 main.rs
use actix_web::{web, App, HttpResponse, HttpServer, ResponseError};
use actix_web_rest::{actix_web, http::StatusCode, rest_error};
use anyhow::anyhow;
#[allow(clippy::enum_variant_names)]
#[rest_error(internal_error)] // internal_error add an InternalError(#[from] anyhow::Error).
enum MyEndpointError {
#[rest(status_code = StatusCode::OK)]
#[error("error foo")]
FooError,
#[rest(status_code = StatusCode::OK)]
#[error("error bar")]
BarError,
}
async fn handler(path: web::Path<String>) -> Result<HttpResponse, impl ResponseError> {
let path_param = path.into_inner();
match path_param.as_ref() {
"foo" => Err(MyEndpointError::FooError),
"bar" => Err(MyEndpointError::BarError),
_ => Err(MyEndpointError::from(anyhow!(
"unexpected path params: {path_param}"
))),
}
}
#[actix_web::main]
async fn main() -> std::io::Result<()> {
HttpServer::new(|| App::new().route("/{error}", web::get().to(handler)))
.bind(("127.0.0.1", 8080))?
.run()
.await
}
curl -i https://127.0.0.1:8080/foo
curl -i https://127.0.0.1:8080/bar
curl -i https://127.0.0.1:8080/baz
贡献
如果您想为 actix-web-rest
做贡献以添加功能或改进代码,请联系我至 [email protected],打开一个 问题 或创建一个 拉取请求。
🌠 展示您的支持
如果此项目对您有帮助,请给一颗 ⭐!
📜 许可证
MIT © Alexandre Negrel
依赖
~16–26MB
~465K SLoC