mirror of
https://github.com/actix/examples
synced 2024-11-24 06:43:00 +01:00
Merge branch 'master' of github.com:actix/examples
This commit is contained in:
commit
cbd9c4ee01
@ -1,15 +1,14 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "juniper-example"
|
name = "juniper-example"
|
||||||
version = "0.1.0"
|
version = "0.2.0"
|
||||||
authors = ["pyros2097 <pyros2097@gmail.com>"]
|
authors = ["pyros2097 <pyros2097@gmail.com>"]
|
||||||
workspace = ".."
|
workspace = ".."
|
||||||
edition = "2018"
|
edition = "2018"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
actix-web = "1.0.0"
|
actix-web = "1.0.9"
|
||||||
env_logger = "0.6"
|
env_logger = "0.7.1"
|
||||||
futures = "0.1"
|
serde = "1.0.103"
|
||||||
serde = "1.0"
|
serde_json = "1.0.44"
|
||||||
serde_json = "1.0"
|
serde_derive = "1.0.103"
|
||||||
serde_derive = "1.0"
|
juniper = "0.14.1"
|
||||||
juniper = "0.9.2"
|
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
# juniper
|
# Juniper
|
||||||
|
|
||||||
Juniper integration for Actix web
|
[Juniper](https://github.com/graphql-rust/juniper) integration for Actix web
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
### server
|
### server
|
||||||
|
|
||||||
@ -13,3 +15,57 @@ cargo run (or ``cargo watch -x run``)
|
|||||||
### web client
|
### web client
|
||||||
|
|
||||||
[http://127.0.0.1:8080/graphiql](http://127.0.0.1:8080/graphiql)
|
[http://127.0.0.1:8080/graphiql](http://127.0.0.1:8080/graphiql)
|
||||||
|
|
||||||
|
_Query example:_
|
||||||
|
```graphql
|
||||||
|
{
|
||||||
|
human(id: "1234") {
|
||||||
|
name
|
||||||
|
appearsIn
|
||||||
|
homePlanet
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
_Result:_
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"data": {
|
||||||
|
"human": {
|
||||||
|
"name": "Luke",
|
||||||
|
"appearsIn": [
|
||||||
|
"NEW_HOPE"
|
||||||
|
],
|
||||||
|
"homePlanet": "Mars"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
_Mutation example:_
|
||||||
|
|
||||||
|
```graphql
|
||||||
|
mutation {
|
||||||
|
createHuman(newHuman: {name: "Fresh Kid Ice", appearsIn: EMPIRE, homePlanet: "earth"}) {
|
||||||
|
id
|
||||||
|
name
|
||||||
|
appearsIn
|
||||||
|
homePlanet
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
_Result:_
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"data": {
|
||||||
|
"createHuman": {
|
||||||
|
"id": "1234",
|
||||||
|
"name": "Fresh Kid Ice",
|
||||||
|
"appearsIn": [
|
||||||
|
"EMPIRE"
|
||||||
|
],
|
||||||
|
"homePlanet": "earth"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
@ -8,7 +8,6 @@ use std::sync::Arc;
|
|||||||
extern crate juniper;
|
extern crate juniper;
|
||||||
|
|
||||||
use actix_web::{middleware, web, App, Error, HttpResponse, HttpServer};
|
use actix_web::{middleware, web, App, Error, HttpResponse, HttpServer};
|
||||||
use futures::future::Future;
|
|
||||||
use juniper::http::graphiql::graphiql_source;
|
use juniper::http::graphiql::graphiql_source;
|
||||||
use juniper::http::GraphQLRequest;
|
use juniper::http::GraphQLRequest;
|
||||||
|
|
||||||
@ -26,17 +25,14 @@ fn graphiql() -> HttpResponse {
|
|||||||
fn graphql(
|
fn graphql(
|
||||||
st: web::Data<Arc<Schema>>,
|
st: web::Data<Arc<Schema>>,
|
||||||
data: web::Json<GraphQLRequest>,
|
data: web::Json<GraphQLRequest>,
|
||||||
) -> impl Future<Item = HttpResponse, Error = Error> {
|
) -> Result<HttpResponse, Error> {
|
||||||
web::block(move || {
|
|
||||||
let res = data.execute(&st, &());
|
let res = data.execute(&st, &());
|
||||||
Ok::<_, serde_json::error::Error>(serde_json::to_string(&res)?)
|
let user = serde_json::to_string(&res)?;
|
||||||
})
|
Ok(
|
||||||
.map_err(Error::from)
|
HttpResponse::Ok()
|
||||||
.and_then(|user| {
|
|
||||||
Ok(HttpResponse::Ok()
|
|
||||||
.content_type("application/json")
|
.content_type("application/json")
|
||||||
.body(user))
|
.body(user)
|
||||||
})
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn main() -> io::Result<()> {
|
fn main() -> io::Result<()> {
|
||||||
|
Loading…
Reference in New Issue
Block a user