6 releases
0.1.5 | Jul 24, 2023 |
---|---|
0.1.4 | Jul 24, 2023 |
#8 in #non-standard
395KB
7.5K
SLoC
axol
axol
is a high-level HTTP framework inspired by axum
. It's an opinionated project -- it won't support every possible use case, but what it does support, it will support well.
Motivation
The popular rust HTTP infrastructure (hyper
, axum
, tonic
, etc) are all built to be powerful and universally usable tools. They succeed that that. I'm an engineer that has written a lot of production software using these projects and others like them, and I've found that a few design decisions and constraints imposed aren't needed in your average day-to-day work.
Some features like:
- Non-UTF8 header support (and the clunkiness that comes with it)
- Support for custom/non-standard HTTP methods
tower
middleware, that while very powerful, has a lot of boilerplate and clunkiness to write.- Exposure of type parameters that just end up getting boxed, sometimes painfully. (
Body
inaxum
as a primary example)
So I finally decided to create an alternative project for your general purpose HTTP needs.
I'm not yet trying to rewrite everything, so this project is still based on hyper
and friends. However, you shouldn't need to import any other crates to make a fully featured web app. No tower-*
, tonic
, hyper
, axum
, http
, http-body
, etc.
Due to some of the inefficiencies added in converting between http
/hyper
and axol
, I intend to eventually fork hyper
.
Current Features
- Compatible with existing
hyper
/tower
middleware (outside of theaxol
routing layer) - Robust and composable middleware system with hooks for error management and request/response inspection/mutation.
axum
-inspired extractors and responders.- Wrapper over all of
http
,http-body
,hyper
. - gRPC support with integration via
prost
- APIs are generally similar to
axum
- Error type is standardized and not able to be opted-out. It's also very flexible and should meet your needs.
Planned Features
- Currently middleware can act just like a handler and use
FromRequestParts
/IntoResponse
/etc. I'd like to make extractors composable in a similar way using proc macros, so that you could bundle them together in a struct. - gRPC build-time support. At the moment, you'll need to hook up your
prost-build
derived types and theaxol
gRPC system manually. I'm not sure how I want to go about this yet, because I don't want to emulate the clunkiness oftonic
. - We always want more useful middleware, extractors, and responders that can be bundled.
- Iterate through dog-fooding. Open GitHub issues with minor issues that are bugging you!
- Client HTTP library
Dependencies
~11–25MB
~395K SLoC