An example GraphQL server written with akka-http, circe and sangria
Scala HTML
Switch branches/tags
Nothing to show
Clone or download
Latest commit 6f12ce1 Jul 21, 2018
Permalink
Failed to load latest commit information.
project sbt 1.1.6 Jul 20, 2018
src Minor improvements May 10, 2018
.gitignore Initial Jul 27, 2015
LICENSE License Jul 27, 2015
README.md Implementation improvements: Mar 18, 2018
app.json Implementation improvements: Mar 18, 2018
build.sbt Upgraded scala, sbt and libs. May 5, 2018

README.md

Sangria akka-http Example

An example GraphQL server written with akka-http, circe and sangria.

Deploy

After starting the server with

sbt run

# or, if you want to watch the source code changes
 
sbt ~reStart

you can run queries interactively using GraphiQL by opening http://localhost:8080 in a browser or query the /graphql endpoint directly. The HTTP endpoint follows GraphQL best practices for handling the HTTP requests.

Here are some examples of the queries you can make:

$ curl -X POST localhost:8080/graphql \
  -H "Content-Type:application/json" \
  -d '{"query": "{hero {name, friends {name}}}"}'

this gives back the hero of StarWars Saga together with the list of his friends, which is of course R2-D2:

{
  "data": {
    "hero": {
      "name": "R2-D2",
      "friends": [
        {
          "name": "Luke Skywalker"
        },
        {
          "name": "Han Solo"
        },
        {
          "name": "Leia Organa"
        }
      ]
    }
  }
}

Here is another example, which uses variables:

$ curl -X POST localhost:8080/graphql \
  -H "Content-Type:application/json" \
  -d '{"query": "query Test($humanId: String!){human(id: $humanId) {name, homePlanet, friends {name}}}", "variables": {"humanId": "1000"}}'

The result should be something like this:

{
  "data": {
    "human": {
      "name": "Luke Skywalker",
      "homePlanet": "Tatooine",
      "friends": [
        {
          "name": "Han Solo"
        },
        {
          "name": "Leia Organa"
        },
        {
          "name": "C-3PO"
        },
        {
          "name": "R2-D2"
        }
      ]
    }
  }
}