• Stars
    star
    126
  • Rank 275,303 (Top 6 %)
  • Language
    Elixir
  • License
    Other
  • Created over 8 years ago
  • Updated over 3 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Plug (Phoenix) integration for GraphQL Elixir

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.