GraphQL Plug
graphql_plug
is a Plug integration for the GraphQL Elixir implementation of Facebook’s GraphQL.
Allows you to easily mount a GraphQL endpoint in Phoenix.
Installation
Make a new Phoenix app
mix phoenix.new hello_graphql --no-ecto cd hello_graphql
Add
plug_graphql
to your list of dependencies inmix.exs
and install the package withmix deps.get
.def deps do [{:plug_graphql, "~> 0.0.2"}] end
Usage
Define a Schema. Here’s a simple one to try out:
# The GraphQL schema we're going to use defmodule TestSchema do def schema do %GraphQL.Schema{ query: %GraphQL.ObjectType{ name: "RootQueryType", fields: [ %GraphQL.FieldDefinition{ name: "greeting", type: "String", resolve: &TestSchema.greeting/1, } ] } } end def greeting(name: name), do: "Hello, #{name}!" def greeting(_), do: greeting(name: "world") end
Add the plug to your
api
pipeline:pipeline :api do plug :accepts, ["json"] plug GraphQL.Plug.GraphQLEndpoint, TestSchema.schema end
Add an endpoint so this route fires
scope "/api", HelloGraphql do pipe_through :api get "/", PageController, :index end
Start Phoenix
mix phoenix.server
Open your browser to
http://localhost:4000/api?query={greeting}
and you should see something like this:{ "data": { "greeting": "Hello, world!" } }
Contributions
This is pretty early days, the graphql execution engine 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!