244 个稳定版本
7.0.7 | 2024年7月14日 |
---|---|
7.0.5 | 2024年5月9日 |
7.0.3 | 2024年3月16日 |
6.0.11 | 2023年11月19日 |
1.16.12 | 2020年7月20日 |
#2093 在 网络编程
234 每月下载量
被 4 个包(直接使用 2 个) 使用
1MB
27K SLoC
async-graphql
一个高性能、完全符合 GraphQL 规范的 GraphQL 服务器库
书籍 • 中文文档 • 文档 • GitHub 仓库 • Cargo 包
此包使用 #![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 服务器粘合在一起的东西,这里提供了以下集成,或者您也可以构建自己的集成!
- 诗歌 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(《code>graphiql)和 GraphQL Playground(《code>playground)的集成外。
特性 | 启用 |
---|---|
apollo_tracing |
启用 Apollo 跟踪扩展。 |
apollo_persisted_queries |
启用 Apollo 持久查询扩展。 |
bson |
与 bson crate 集成。 |
bigdecimal |
与 bigdecimal crate 集成。 |
cbor |
支持 serde_cbor。 |
chrono |
与 chrono crate 集成。 |
chrono-tz |
与 chrono-tz crate 集成。 |
dataloader |
支持 DataLoader。 |
decimal |
与 rust_decimal crate 集成。 |
dynamic-schema |
支持动态模式 |
fast_chemail |
与 fast_chemail crate 集成。 |
graphiql |
启用 GraphiQL IDE 集成 |
hashbrown |
与 hashbrown crate 集成。 |
log |
启用 Logger 扩展。 |
opentelemetry |
启用 OpenTelemetry 扩展。 |
playground |
启用 GraphQL playground IDE 集成 |
rawvalue |
支持从 serde_json 获取原始值 |
secrecy |
与 secrecy crate 集成。 |
smol_str |
与 smol_str crate 集成。 |
string_number |
启用 StringNumber。 |
time |
与 time crate 集成。 |
tracing |
启用 Tracing 扩展。 |
tempfile |
将上传的内容保存到临时文件中。 |
tokio-sync |
与 tokio::sync::RwLock 和 tokio::sync::Mutex 集成。 |
解除封锁 |
支持 异步上传读取器 |
uuid |
与 uuid 库 集成。 |
url |
与 url 库 集成。 |
可观察性
Apollo Studio 是用于在生产环境中监控您的 GraphQL 服务器的工具之一。Apollo Studio 是一个云平台,帮助您构建、监控、验证和保障组织的数据图。通过添加扩展库 async_graphql_apollo_studio_extension
来实现这一功能。
谁在生产中使用 async-graphql
?
- Vector
- DiveDB
- Kairos Sports tech
- AxieInfinity
- Nando's
- Prima.it
- VoxJar
- Zenly
- Brevz
- thorndyke
- My Data My Consent
社区展示
- rust-actix-graphql-sqlx-postgresql 使用 Rust 和 Apollo Federation 进行 GraphQL
- entity-rs 基于 TAO 的简化框架,Facebook 的社交图分布式数据库。
- vimwiki-server 提供GraphQL服务器以检查和操作 vimwiki 文件。
- Diana Diana 是一个专为 Rust 设计的 GraphQL 系统,它尽可能简单,同时不牺牲配置能力。
- cindythink
- sudograph
博客文章
- Rust 的异步 GraphQL
- Rust 的 GraphQL
- 如何使用 Rocket、GraphQL 和 PostgreSQL 实现一个 Rust 微服务
- 在 Lambda 上使用 Rust 运行 GraphQL
参考文献
- GraphQL
- GraphQL 分块请求
- 分块 HTTP 协议用于 GraphQL 订阅
- GraphQL 游标连接规范
- WebSocket 协议上的 GraphQL
- Apollo 追踪
- Apollo 联邦
许可
许可方式为以下之一
- Apache 许可证 2.0 版本,(LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
- MIT 许可证 (LICENSE-MIT 或 http://opensource.org/licenses/MIT),任选其一。
lib.rs
:
Async-graphql 与 Tide 集成
示例
依赖项
~19–32MB
~571K SLoC