Expand description
§A GraphQL server library implemented in Rust
§Documentation
- Book
- 中文文档
- Docs
- GitHub repository
- Cargo package
- Minimum supported Rust version: 1.56.1 or later
§Features
- Fully supports async/await
- Type safety
- Rustfmt friendly (Procedural Macro)
- Custom scalars
- Minimal overhead
- Easy integration (poem, actix_web, tide, warp, rocket …)
- File upload (Multipart request)
- Subscriptions (WebSocket transport)
- Custom extensions
- Apollo Tracing extension
- Limit query complexity/depth
- Error Extensions
- Apollo Federation(v2)
- Batch Queries
- Apollo Persisted Queries
§Crate features
This crate offers the following features, all of which are not activated by default:
feature | enables |
---|---|
apollo_tracing | Enable the Apollo tracing extension. |
apollo_persisted_queries | Enable the Apollo persisted queries extension. |
boxed-trait | Enables async-trait for all traits. |
bson | Integrate with the bson crate. |
bigdecimal | Integrate with the bigdecimal crate. |
cbor | Support for serde_cbor. |
chrono | Integrate with the chrono crate. |
chrono-tz | Integrate with the chrono-tz crate. |
dataloader | Support DataLoader. |
decimal | Integrate with the rust_decimal crate. |
dynamic-schema | Support dynamic schema |
fast_chemail | Integrate with the fast_chemail crate. |
graphiql | Enables the GraphiQL IDE integration |
hashbrown | Integrate with the hashbrown crate. |
log | Enable the Logger extension. |
opentelemetry | Enable the OpenTelemetry extension. |
playground | Enables the GraphQL playground IDE integration |
rawvalue | Support raw values from serde_json |
secrecy | Integrate with the secrecy crate. |
smol_str | Integrate with the smol_str crate. |
string_number | Enable the StringNumber. |
time | Integrate with the time crate. |
tracing | Enable the Tracing extension. |
tempfile | Save the uploaded content in the temporary file. |
tokio-sync | Integrate with the tokio::sync::RwLock and tokio::sync::Mutex . |
unblock | Support Asynchronous reader for Upload |
uuid | Integrate with the uuid crate. |
url | Integrate with the url crate. |
§Integrations
- Poem async-graphql-poem
- Actix-web async-graphql-actix-web
- Warp async-graphql-warp
- Tide async-graphql-tide
- Rocket async-graphql-rocket
- Axum async-graphql-axum
§License
Licensed under either of
- Apache License, Version 2.0, (./LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (./LICENSE-MIT or http://opensource.org/licenses/MIT) at your option.
§References
- GraphQL
- GraphQL Multipart Request
- GraphQL Cursor Connections Specification
- GraphQL over WebSocket Protocol
- Apollo Tracing
- Apollo Federation
§Examples
All examples are in the sub-repository, located in the examples directory.
Run an example:
git submodule update # update the examples repo
cd examples && cargo run --bin [name]
§Benchmarks
Ensure that there is no CPU-heavy process in background!
cd benchmark
cargo bench
Now a HTML report is available at benchmark/target/criterion/report
.
Re-exports§
pub use base::ComplexObject;
pub use base::Description;
pub use custom_directive::CustomDirectiveFactory;
pub use custom_directive::TypeDirective;
pub use extensions::ResolveFut;
pub use parser::Pos;
pub use parser::Positioned;
pub use resolver_utils::ContainerType;
pub use resolver_utils::EnumType;
pub use resolver_utils::ScalarType;
pub use schema::SchemaEnv;
pub use validation::VisitorContext;
pub use async_graphql_parser as parser;
pub use context::*;
pub use types::*;
Modules§
- Query context.
- dataloader
dataloader
Batch loading support, used to solve N+1 problem. - dynamic
dynamic-schema
Suppport for dynamic schema - Extensions for schema
- A helper module that supports HTTP
- Utilities for implementing
OutputType::resolve
. - Useful GraphQL types.
Macros§
- Define a scalar
- Construct a
ConstValue
.
Structs§
- Cache control value
- This type represents errors that can occur when deserializing.
- An error with a message and optional extensions.
- Extensions to the error.
- Extensions of a query.
- An error parsing an input value.
- A selection performed by a query.
- A GraphQL name.
- Represents a JSON number, whether integer or floating point.
- GraphQL request.
- Query response
- Options for SDL export
- GraphQL schema.
- Schema builder
- This type represents errors that can occur when serializing.
- An error in a GraphQL server.
- Validation results.
- Variables of a query.
Enums§
- Batch support for GraphQL requests, which is either a single query, or an array of queries
- Response for batchable queries
- Introspection mode
- An error parsing the request.
- A segment of path to a resolver.
- Validation mode
- A resolved GraphQL value, for example
1
or"Hello World!"
.
Traits§
- Represents a custom directive.
- Represents a custom input value validator.
- An error which can be extended into a
Error
. - Represents a GraphQL executor
- Field guard
- An extension trait for
Guard
. - A GraphQL input object.
- Represents a GraphQL input type.
- A GraphQL interface.
- A GraphQL object.
- A GraphQL oneof input object.
- Represents a GraphQL output type.
- Extend a
Result
’s error value withErrorExtensions
. - A GraphQL subscription object
- Used to specify the GraphQL Type name.
- A GraphQL interface.
Functions§
- Interpret a
ConstValue
as an instance of typeT
. - Convert a
T
intoConstValue
which is an enum that can represent any valid GraphQL data.
Type Aliases§
- An alias of async_graphql::Error. Present for backward compatibility reasons.
- An alias of async_graphql::Result. Present for backward compatibility reasons.
- An error parsing a value of type
T
. - An alias for
Result<T, Error>
. - Alias for
Result<T, ServerError>
.
Attribute Macros§
- Define a complex GraphQL object for SimpleObject’s complex field resolver.
- Define a directive for query.
- Define a GraphQL object with methods
- Define a Scalar
- Define a GraphQL subscription
Derive Macros§
- Attach a description to
Object
,Scalar
orSubscription
. - Define a GraphQL enum
- Define a GraphQL input object
- Define a GraphQL interface
- Define a merged object with multiple object types.
- Define a merged subscription with multiple subscription types.
- Define a NewType Scalar
- Define a GraphQL oneof input object
- Define a GraphQL object with fields
- Define a GraphQL union