GraphQL Plug
plug_graphql
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, or add it to your existing app.
mix phoenix.new hello_graphql --no-ecto cd hello_graphql
Alternatively you could clone the Phoenix GraphQL example project repo
git clone https://github.com/joshprice/hello_graphql_phoenix
Add
plug_graphql
to your list of dependencies inmix.exs
and install the package withmix deps.get
.def deps do [{:plug_graphql, "~> 0.0.6"}] end
Usage
Define a simple schema in
web/graphql/test_schema.ex
:defmodule TestSchema do def schema do %GraphQL.Schema{ query: %GraphQL.ObjectType{ name: "RootQueryType", fields: %{ greeting: %GraphQL.FieldDefinition{ type: "String", resolve: &TestSchema.greeting/3 } } } } end def greeting(_, %{name: name}, _), do: "Hello, #{name}!" def greeting(_, _, _), do: "Hello, world!" end
Your
api
pipeline should have this as a minimum:pipeline :api do plug :accepts, ["json"] end
Mount the GraphQL endpoint as follows:
scope "/api" do pipe_through :api forward "/", GraphQL.Plug.Endpoint, schema: {TestSchema, :schema} 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!
Acknowledgements
Thanks and appreciation goes to the following contributors for answering many questions and providing helpful feedback:
- Daniel Neighman (https://github.com/hassox)
- Chris McCord (https://github.com/chrismccord)
Thanks also to everyone who has submitted PRs, logged issues, given feedback or asked questions.