Add tide integration book section
This commit is contained in:
parent
6bc74ba15b
commit
f2b42aa094
|
@ -26,6 +26,7 @@
|
||||||
- [Query complexity and depth](depth_and_complexity.md)
|
- [Query complexity and depth](depth_and_complexity.md)
|
||||||
- [Hide content in introspection](visibility.md)
|
- [Hide content in introspection](visibility.md)
|
||||||
- [Integrations](integrations.md)
|
- [Integrations](integrations.md)
|
||||||
|
- [Tide](integrations_to_tide.md)
|
||||||
- [Warp](integrations_to_warp.md)
|
- [Warp](integrations_to_warp.md)
|
||||||
- [Actix-web](integrations_to_actix_web.md)
|
- [Actix-web](integrations_to_actix_web.md)
|
||||||
- [Advanced topics](advanced_topics.md)
|
- [Advanced topics](advanced_topics.md)
|
||||||
|
|
73
docs/en/src/integrations_to_tide.md
Normal file
73
docs/en/src/integrations_to_tide.md
Normal file
|
@ -0,0 +1,73 @@
|
||||||
|
# Actix-web
|
||||||
|
|
||||||
|
`async_graphql_tide` provides an implementation of [tide::Endpoint](https://docs.rs/tide/0.15.0/tide/trait.Endpoint.html) trait. It also provides `receive_request` and `respond` functions to convert a Tide request to a GraphQL request and back to Tide response, if you want to handle the request manually.
|
||||||
|
|
||||||
|
## Request example
|
||||||
|
|
||||||
|
When you create your Tide server, you will need to pass the `async_graphql_tide::endpoint` with your schema as the POST request handler. Please note that you need to enable the `attributes` feature in `tide` for this example to work.
|
||||||
|
|
||||||
|
```rust
|
||||||
|
use async_graphql::{
|
||||||
|
http::{playground_source, GraphQLPlaygroundConfig},
|
||||||
|
Context, EmptyMutation, EmptySubscription, Object, Schema, SimpleObject,
|
||||||
|
};
|
||||||
|
use tide::{http::mime, Body, Response, StatusCode};
|
||||||
|
|
||||||
|
#[derive(SimpleObject)]
|
||||||
|
pub struct Demo {
|
||||||
|
pub id: usize,
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct QueryRoot;
|
||||||
|
|
||||||
|
#[Object]
|
||||||
|
impl QueryRoot {
|
||||||
|
async fn demo(&self, _ctx: &Context<'_>) -> Demo {
|
||||||
|
Demo { id: 42 }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[async_std::main]
|
||||||
|
async fn main() -> tide::Result<()> {
|
||||||
|
let mut app = tide::new();
|
||||||
|
|
||||||
|
// create schema
|
||||||
|
let schema = Schema::build(QueryRoot, EmptyMutation, EmptySubscription).finish();
|
||||||
|
|
||||||
|
// add tide endpoint
|
||||||
|
app.at("/graphql")
|
||||||
|
.post(async_graphql_tide::endpoint(schema));
|
||||||
|
|
||||||
|
// enable graphql playground
|
||||||
|
app.at("/").get(|_| async move {
|
||||||
|
Ok(Response::builder(StatusCode::Ok)
|
||||||
|
.body(Body::from_string(playground_source(
|
||||||
|
// note that the playground needs to know
|
||||||
|
// the path to the graphql endpoint
|
||||||
|
GraphQLPlaygroundConfig::new("/graphql"),
|
||||||
|
)))
|
||||||
|
.content_type(mime::HTML)
|
||||||
|
.build())
|
||||||
|
});
|
||||||
|
|
||||||
|
Ok(app.listen("127.0.0.1:8080").await?)
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Manually handle the request
|
||||||
|
|
||||||
|
If you want to manually handle the request, for example to read a header, you can skip `async_graphql_tide::endpoint` and use `receive_request` and `respond` functions instead.
|
||||||
|
|
||||||
|
```rust
|
||||||
|
app.at("/graphql").post(move |req: tide::Request<()>| {
|
||||||
|
let schema = schema.clone();
|
||||||
|
async move {
|
||||||
|
let req = async_graphql_tide::receive_request(req).await?;
|
||||||
|
async_graphql_tide::respond(schema.execute(req).await)
|
||||||
|
}
|
||||||
|
});
|
||||||
|
```
|
||||||
|
|
||||||
|
## More examples
|
||||||
|
|
||||||
|
[https://github.com/async-graphql/examples/tree/master/tide](https://github.com/async-graphql/examples/tree/master/tide)
|
Loading…
Reference in New Issue
Block a user