6 个版本
0.1.5 | 2023 年 7 月 24 日 |
---|---|
0.1.4 | 2023 年 7 月 24 日 |
#2108 在 网页编程
每月 21 次下载
395KB
7.5K SLoC
axol
axol
是一个受 axum
启发的 HTTP 高级框架。这是一个有偏见的工程——它不会支持每个可能的使用场景,但它在支持的场景中会做得很好。
动机
流行的 Rust HTTP 基础设施(如 hyper
、axum
、tonic
等)都是构建为强大且通用的工具。它们在这方面做得很好。我是一位工程师,使用过这些项目和类似的项目编写了大量生产软件,我发现其中一些设计决策和强加的限制在日常工作中并不需要。
一些功能,如
- 支持非 UTF-8 头部(以及随之而来的笨拙性)
- 支持自定义/非标准 HTTP 方法
tower
中间件,虽然非常强大,但编写起来有很多样板代码和笨拙性。- 暴露类型参数,最终只是被装箱,有时甚至痛苦。(
axum
中的Body
是一个主要的例子)
因此,我最终决定为您的通用 HTTP 需求创建一个替代项目。
我还没有试图重写一切,所以这个项目仍然基于 hyper
和其他相关项目。然而,您不应该需要导入任何其他 crate 来创建一个功能齐全的网页应用。无需 tower
、tonic
、hyper
、axum
、http
、http-body
等。
由于在将 http
/hyper
和 axol
之间转换时添加了一些低效性,我打算最终分叉 hyper
。
当前功能
- 与现有的
hyper
/tower
中间件兼容(除axol
路由层之外) - 强大且可组合的中间件系统,具有错误管理和请求/响应检查/修改的挂钩。
axum
启发的提取器和响应器。- 覆盖所有
http
、http-body
、hyper
。 - 通过
prost
集成 gRPC 支持 - API 与
axum
类似 - 错误类型标准化,无法选择退出。它也非常灵活,应该能满足您的需求。
计划功能
- 目前中间件可以像处理器一样工作,并使用
FromRequestParts
/IntoResponse
等。我希望使用宏来使提取器可组合,以便您可以将它们打包在一起到结构体中。 - gRPC构建时支持。目前,您需要手动连接到由
prost-build
导出的类型和axol
gRPC系统。我还不确定如何进行,因为我不想模仿tonic
的笨拙。 - 我们总是希望有更多有用的中间件、提取器和响应器可以被打包。
- 迭代尝食。提出GitHub问题,报告让您烦恼的小问题!
- 客户端HTTP库
依赖项
~10–25MB
~406K SLoC