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网络编程

Download history 22/week @ 2024-04-25 12/week @ 2024-05-02 159/week @ 2024-05-09 26/week @ 2024-05-16 18/week @ 2024-05-23 20/week @ 2024-05-30 182/week @ 2024-06-06 36/week @ 2024-06-13 15/week @ 2024-06-20 18/week @ 2024-06-27 214/week @ 2024-07-04 149/week @ 2024-07-11 48/week @ 2024-07-18 165/week @ 2024-07-25 8/week @ 2024-08-01 8/week @ 2024-08-08

234 每月下载量
4 个包(直接使用 2 个) 使用

MIT/Apache

1MB
27K SLoC

async-graphql

一个高性能、完全符合 GraphQL 规范的 GraphQL 服务器库

书籍中文文档文档GitHub 仓库Cargo 包


ci status code coverage Unsafe Rust forbidden Crates.io version docs.rs docs downloads PRs Welcome

此包使用 #![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 友好(过程宏)
  • 自定义标量
  • 开销最小化
  • 易于集成(poemaxumactix-webtidewarprocket ...)
  • 上传文件(多部分请求)
  • 订阅(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 服务器粘合在一起的东西,这里提供了以下集成,或者您也可以构建自己的集成!

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::RwLocktokio::sync::Mutex 集成。
解除封锁 支持 异步上传读取器
uuid uuid 集成。
url url 集成。

可观察性

Apollo Studio 是用于在生产环境中监控您的 GraphQL 服务器的工具之一。Apollo Studio 是一个云平台,帮助您构建、监控、验证和保障组织的数据图。通过添加扩展库 async_graphql_apollo_studio_extension 来实现这一功能。

谁在生产中使用 async-graphql

社区展示

博客文章

参考文献

许可

许可方式为以下之一


lib.rs:

Async-graphql 与 Tide 集成

示例

完整示例

依赖项

~19–32MB
~571K SLoC