async-graphql/docs/zh-CN/src/integrations_to_warp.md

2.0 KiB
Raw Blame History

Warp

Async-graphql-warp提供了两个Filtergraphqlgraphql_subscription

graphql用于执行QueryMutation请求它提取GraphQL请求然后输出一个包含async_graphql::Schemaasync_graphql::Request元组你可以在之后组合其它Filter或者直接调用Schema::execute执行查询。

graphql_subscription用于实现基于Web Socket的订阅它输出warp::Reply

请求例子

# extern crate async_graphql_warp;
# extern crate async_graphql;
# extern crate warp;
# use async_graphql::*;
# use std::convert::Infallible;
# use warp::Filter;
# struct QueryRoot;
# #[Object]
# impl QueryRoot { async fn version(&self) -> &str { "1.0" } }
# async fn other() {
type MySchema = Schema<QueryRoot, EmptyMutation, EmptySubscription>;

let schema = Schema::new(QueryRoot, EmptyMutation, EmptySubscription);
let filter = async_graphql_warp::graphql(schema).and_then(|(schema, request): (MySchema, async_graphql::Request)| async move {
    // 执行查询
    let resp = schema.execute(request).await;

    // 返回结果
    Ok::<_, Infallible>(async_graphql_warp::GraphQLResponse::from(resp))
});
warp::serve(filter).run(([0, 0, 0, 0], 8000)).await;
# }

订阅例子

# extern crate async_graphql_warp;
# extern crate async_graphql;
# extern crate warp;
# use async_graphql::*;
# use futures_util::stream::{Stream, StreamExt};
# use std::convert::Infallible;
# use warp::Filter;
# struct SubscriptionRoot;
# #[Subscription]
# impl SubscriptionRoot {
#   async fn tick(&self) -> impl Stream<Item = i32> {
#     futures_util::stream::iter(0..10)
#   }
# }
# struct QueryRoot;
# #[Object]
# impl QueryRoot { async fn version(&self) -> &str { "1.0" } }
# async fn other() {
let schema = Schema::new(QueryRoot, EmptyMutation, SubscriptionRoot);
let filter = async_graphql_warp::graphql_subscription(schema);
warp::serve(filter).run(([0, 0, 0, 0], 8000)).await;
# }

更多例子

https://github.com/async-graphql/examples/tree/master/warp