The GraphQL server library implemented by rust
async-graphql
is a GraphQL server library that fully supports async/await and is easy to use.
It supports all of the GraphQL specifications and is easy to integrate into existing web servers.
Example
shell script
cargo run --example actix-web
Open http://localhost:8000
in browser
Benchmark
shell script
git clone https://github.com/sunli829/graphql-benchmark
cargo run --release
Features
- Fully support async/await
- Type safety
- Rustfmt friendly (Procedural Macro)
- Custom scalar
- Minimal overhead
- Easy integration (hyper, actix_web, tide ...)
- Upload files (Multipart request)
- Subscription (WebSocket transport)
- Custom extension
- Apollo Tracing extension
- Limit query complexity/depth
- Error Extensions
Integrations
Goals
- [X] Types
- [X] Scalar
- [X] Integer
- [X] Float
- [X] String
- [X] Bool
- [X] ID
- [X] DateTime
- [X] UUID
- [X] Url
- [X] ObjectId
- [X] Containers
- [X] Object
- [X] Enum
- [X] InputObject
- [X] Field default value
- [X] Deprecated flag
- [X] Interface
- [X] Union
- [X] Query
- [X] Fields
- [X] Arguments
- [X] Default value
- [X] Deprecated flag
- [X] Alias
- [X] Fragments
- [X] Inline fragments
- [X] Operation name
- [X] Variables
- [X] Default value
- [X] Parse value
- [X] Directives
- [X] @include
- [X] FIELD
- [X] FRAGMENTSPREAD
- [X] INLINEFRAGMENT
- [X] @skip
- [X] FIELD
- [X] FRAGMENTSPREAD
- [X] INLINEFRAGMENT
- [X] Introspection
- [X] Query
- [X] Disable introspection
- [X] Multipart Request
- [X] Cursor Connections
- [X] Input value validators
- [X] Custom validator
- [X] Combination
- [X] Integer
- [X] IntRange
- [X] IntLessThan
- [X] IntGreaterThan
- [X] IntNonZero
- [X] String
- [X] Email
- [X] MAC
- [X] StringMinLength
- [X] StringMaxLength
- [X] List
- [X] ListMaxLength
- [X] ListMinLength
- [X] Limit query complexity
- [X] Limit query depth
- [X] Extensions
- [X] Custom
- [X] Apollo tracing
- [X] Subscription
- [X] Filter
- [X] WebSocket transport
- [X] Validation rules
- [X] ArgumentsOfCorrectType
- [X] DefaultValuesOfCorrectType
- [X] FieldsOnCorrectType
- [X] FragmentsOnCompositeTypes
- [X] KnownArgumentNames
- [X] KnownDirectives
- [X] KnownFragmentNames
- [X] KnownTypeNames
- [X] LoneAnonymousOperation
- [X] NoFragmentCycles
- [X] NoUndefinedVariables
- [X] NoUnusedFragments
- [X] NoUnusedVariables
- [X] OverlappingFieldsCanBeMerged
- [X] PossibleFragmentSpreads
- [X] ProvidedNonNullArguments
- [X] ScalarLeafs
- [X] UniqueArgumentNames
- [X] UniqueFragmentNames
- [X] UniqueOperationNames
- [X] UniqueVariableNames
- [X] VariablesAreInputTypes
- [X] VariableInAllowedPosition
- [ ] Integration examples
- [X] Actix-web
- [ ] Hyper
- [X] Tide
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
Contribute
Welcome to contribute !