3 个版本 (破坏性更新)
0.3.0 | 2023 年 6 月 25 日 |
---|---|
0.2.0 | 2023 年 6 月 17 日 |
0.1.0 | 2023 年 6 月 17 日 |
#36 in #restful
16KB
302 行
actix-web-rest
- 使用 actix-web 构建 restful API 的有观点工具包。
此软件包包含用于加快使用 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],打开一个 问题 或发起一个 pull request。
🌠 表达您的支持
如果此项目对您有所帮助,请给予 ⭐ 吧!
📜 许可证
MIT © Alexandre Negrel
依赖关系
~0.9–1.6MB
~32K SLoC