6 个版本

0.1.5 2023 年 7 月 24 日
0.1.4 2023 年 7 月 24 日

#2108网页编程

每月 21 次下载

Apache-2.0 OR MIT

395KB
7.5K SLoC

axol

axol 是一个受 axum 启发的 HTTP 高级框架。这是一个有偏见的工程——它不会支持每个可能的使用场景,但它在支持的场景中会做得很好。

动机

流行的 Rust HTTP 基础设施(如 hyperaxumtonic 等)都是构建为强大且通用的工具。它们在这方面做得很好。我是一位工程师,使用过这些项目和类似的项目编写了大量生产软件,我发现其中一些设计决策和强加的限制在日常工作中并不需要。

一些功能,如

  • 支持非 UTF-8 头部(以及随之而来的笨拙性)
  • 支持自定义/非标准 HTTP 方法
  • tower 中间件,虽然非常强大,但编写起来有很多样板代码和笨拙性。
  • 暴露类型参数,最终只是被装箱,有时甚至痛苦。(axum 中的 Body 是一个主要的例子)

因此,我最终决定为您的通用 HTTP 需求创建一个替代项目。

我还没有试图重写一切,所以这个项目仍然基于 hyper 和其他相关项目。然而,您不应该需要导入任何其他 crate 来创建一个功能齐全的网页应用。无需 towertonichyperaxumhttphttp-body 等。

由于在将 http/hyperaxol 之间转换时添加了一些低效性,我打算最终分叉 hyper

当前功能

  • 与现有的 hyper/tower 中间件兼容(除 axol 路由层之外)
  • 强大且可组合的中间件系统,具有错误管理和请求/响应检查/修改的挂钩。
  • axum 启发的提取器和响应器。
  • 覆盖所有 httphttp-bodyhyper
  • 通过 prost 集成 gRPC 支持
  • API 与 axum 类似
  • 错误类型标准化,无法选择退出。它也非常灵活,应该能满足您的需求。

计划功能

  • 目前中间件可以像处理器一样工作,并使用FromRequestParts/IntoResponse等。我希望使用宏来使提取器可组合,以便您可以将它们打包在一起到结构体中。
  • gRPC构建时支持。目前,您需要手动连接到由prost-build导出的类型和axol gRPC系统。我还不确定如何进行,因为我不想模仿tonic的笨拙。
  • 我们总是希望有更多有用的中间件、提取器和响应器可以被打包。
  • 迭代尝食。提出GitHub问题,报告让您烦恼的小问题!
  • 客户端HTTP库

依赖项

~10–25MB
~406K SLoC