88个稳定版本
7.0.7 | 2024年7月14日 |
---|---|
7.0.5 | 2024年5月9日 |
7.0.3 | 2024年3月16日 |
6.0.11 | 2023年11月19日 |
2.11.3 | 2021年11月13日 |
#2181 in 异步
每月2,101次下载
1MB
27K SLoC
async-graphql
一个高性能、完全符合规范的GraphQL服务器库
书籍 • 中文文档 • 文档 • GitHub仓库 • Cargo包
此crate使用#![forbid(unsafe_code)]
来确保所有内容都是100%安全的Rust实现。
静态模式
use std::error::Error;
use async_graphql::{http::GraphiQLSource, EmptyMutation, EmptySubscription, Object, Schema};
use async_graphql_poem::*;
use poem::{listener::TcpListener, web::Html, *};
struct Query;
#[Object]
impl Query {
async fn howdy(&self) -> &'static str {
"partner"
}
}
#[handler]
async fn graphiql() -> impl IntoResponse {
Html(GraphiQLSource::build().finish())
}
#[tokio::main]
async fn main() -> Result<(), Box<dyn Error>> {
// create the schema
let schema = Schema::build(Query, EmptyMutation, EmptySubscription).finish();
// start the http server
let app = Route::new().at("/", get(graphiql).post(GraphQL::new(schema)));
println!("GraphiQL: https://127.0.0.1:8000");
Server::new(TcpListener::bind("0.0.0.0:8000"))
.run(app)
.await?;
Ok(())
}
动态模式
需要启用dynamic-schema
功能。
use std::error::Error;
use async_graphql::{dynamic::*, http::GraphiQLSource};
use async_graphql_poem::*;
use poem::{listener::TcpListener, web::Html, *};
#[handler]
async fn graphiql() -> impl IntoResponse {
Html(GraphiQLSource::build().finish())
}
#[tokio::main]
async fn main() -> Result<(), Box<dyn Error>> {
let query = Object::new("Query").field(Field::new(
"howdy",
TypeRef::named_nn(TypeRef::STRING),
|_| FieldFuture::new(async { "partner" }),
));
// create the schema
let schema = Schema::build(query, None, None).register(query).finish()?;
// start the http server
let app = Route::new().at("/", get(graphiql).post(GraphQL::new(schema)));
println!("GraphiQL: https://127.0.0.1:8000");
Server::new(TcpListener::bind("0.0.0.0:8000"))
.run(app)
.await?;
Ok(())
}
功能
- 完全支持静态和动态模式
- 完全支持async/await
- 类型安全
- Rustfmt友好(过程宏)
- 自定义标量
- 最小开销
- 易于集成(《poem》、《axum》、《actix-web》、《tide》、《warp》、《rocket》...)
- 上传文件(多部分请求)
- 订阅(WebSocket传输)
- 自定义扩展
- 错误扩展
- 限制查询复杂度/深度
- 批量查询
- Apollo持久查询
- Apollo跟踪扩展
- Apollo联邦(v2)
注意:最低支持的Rust版本:1.75.0或更高
示例
所有示例都在子仓库中,位于examples目录。
git submodule update # update the examples repo
cd examples && cargo run --bin [name]
更多信息,请参阅子存储库的README.md。
集成
集成是将async-graphql
与您的Web服务器粘合在一起的部分,这里提供了以下集成,或者您可以构建自己的集成!
- 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
crate特性
本crate提供以下特性。大多数特性默认未启用,除了GraphiQL (graphiql
)和GraphQL Playground (playground
)的集成。
feature | 启用 |
---|---|
apollo_tracing |
启用Apollo tracing扩展。 |
apollo_persisted_queries |
启用Apollo持久化查询扩展。 |
log |
启用Logger扩展。 |
tracing |
启用Tracing扩展。 |
opentelemetry |
启用OpenTelemetry扩展。 |
unblock |
支持Upload的异步读取器。 |
bson |
与bson crate集成。 |
chrono |
与chrono crate集成。 |
chrono-tz |
与chrono-tz crate集成。 |
url |
与url crate集成。 |
uuid |
与uuid crate集成。 |
string_number |
启用StringNumber。 |
dataloader |
支持DataLoader。 |
secrecy |
与secrecy crate集成。 |
decimal |
与rust_decimal crate集成。 |
bigdecimal |
与bigdecimal crate集成。 |
cbor |
支持serde_cbor。 |
smol_str |
与smol_str crate集成。 |
hashbrown |
与hashbrown crate集成。 |
time |
与time crate集成。 |
tokio-sync |
与tokio::sync::RwLock 和tokio::sync::Mutex 集成。 |
fast_chemail |
与fast_chemail crate集成。 |
tempfile |
将上传内容保存在临时文件中。 |
dynamic-schema |
支持动态模式 |
GraphiQL |
启用GraphiQL IDE集成 |
游乐场 |
启用GraphQL playground IDE集成 |
可观察性
Apollo Studio是用于在生产中监控您的graphql服务器的工具之一。Apollo Studio是一个云平台,帮助您构建、监控、验证和确保您组织的数据图。通过添加扩展crate async_graphql_apollo_studio_extension
来实现这一点。
谁在生产中使用了async-graphql
?
- Vector
- DiveDB
- Kairos Sports tech
- AxieInfinity
- Nando's
- Prima.it
- VoxJar
- Zenly
- Brevz
- thorndyke
- 我的数据,我的同意
社区展示
- rust-actix-graphql-sqlx-postgresql 使用Rust和Apollo Federation进行GraphQL
- entity-rs 基于 TAO,Facebook 的社交图分布式数据库的一个简单框架。
- vimwiki-server 提供了用于检查和操作vimwiki文件的graphql服务器。
- Diana Diana是一个为Rust设计的GraphQL系统,旨在尽可能简单地工作,同时不牺牲配置能力。
- cindythink
- sudograph
博客文章
参考文献
- GraphQL
- GraphQL Multipart Request
- GraphQL订阅的多部分HTTP协议
- GraphQL游标连接规范
- WebSocket协议上的GraphQL
- Apollo Tracing
- Apollo Federation
许可证
根据以下任一许可证授权
- Apache许可证,版本2.0,(LICENSE-APACHE或https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT许可证(LICENSE-MIT或http://opensource.org/licenses/MIT),由您选择。
lib.rs
:
Async-graphql与Rocket集成。
注意:此集成与未发布的Rocket 0.5版本,因此可以预期此库和Rocket都将有破坏性变更。
要配置发送和接收多部分请求的选项,请将您的MultipartOptions
实例添加到Rocket管理的状态中(.manage(your_multipart_options)
)。
依赖关系
~20–52MB
~890K SLoC