Plug (Phoenix) integration for GraphQL Elixir
Elixir HTML
Switch branches/tags
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
config
lib
templates
test
.gitignore
.travis.yml Require Elixir 1.2+ Mar 16, 2016
CHANGELOG.md
CODE_OF_CONDUCT.md Add Contributor Covenant Code of Conduct v1.4 Mar 17, 2016
LICENSE
README.md
RELEASE.md
mix.exs
mix.lock Update all dependencies Jun 15, 2016

README.md

GraphQL Plug

Build Status Public Slack Discussion

plug_graphql is a Plug integration for the GraphQL Elixir implementation of Facebook's GraphQL.

This Plug allows you to easily mount a GraphQL endpoint in Phoenix. This example project shows you how:

Installation

  1. Make a new Phoenix app, or add it to your existing app.
```sh
mix phoenix.new hello_graphql
cd hello_graphql
```

```sh
git clone https://github.com/graphql-elixir/hello_graphql_phoenix
```
  1. Add plug_graphql to your list of dependencies and applications in mix.exs and install the package with mix deps.get.
```elixir
def application do
  # Add the application to your list of applications.
  # This will ensure that it will be included in a release.
  [applications: [:logger, :plug_graphql]]
end

def deps do
  [{:plug_graphql, "~> 0.3.1"}]
end
```

Usage

  1. Define a simple schema in web/graphql/test_schema.ex:
```elixir
defmodule TestSchema do
  def schema do
    %GraphQL.Schema{
      query: %GraphQL.Type.ObjectType{
        name: "Hello",
        fields: %{
          greeting: %{
            type: %GraphQL.Type.String{},
            args: %{
              name: %{
                type: %GraphQL.Type.String{}
              }
            },
            resolve: {TestSchema, :greeting}
          }
        }
      }
    }
  end

  def greeting(_, %{name: name}, _), do: "Hello, #{name}!"
  def greeting(_, _, _), do: "Hello, world!"
end
```
  1. Your api pipeline should have this as a minimum:
```elixir
pipeline :api do
  plug :accepts, ["json"]
end
```
  1. Mount the GraphQL endpoint as follows:
```elixir
scope "/api" do
  pipe_through :api

  forward "/", GraphQL.Plug, schema: {TestSchema, :schema}
end
```
  1. Start Phoenix
```sh
mix phoenix.server
```
  1. Open your browser to http://localhost:4000/api?query={greeting} and you should see something like this:
```json
{
  "data": {
    "greeting": "Hello, world!"
  }
}
```

Contributions

This is pretty early days, the GraphQL Elixir ecosystem needs a lot more work to be useful.

However we can't get there without your help, so any questions, bug reports, feedback, feature requests and/or PRs are most welcome!

Acknowledgements

Thanks and appreciation goes to the following contributors for PRs, discussions, answering many questions and providing helpful feedback:

Thanks also to everyone who has submitted PRs, logged issues, given feedback or asked questions.