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:
- Make a new Phoenix app, or add it to your existing app.
```sh
mix phoenix.new hello_graphql --no-ecto
cd hello_graphql
```
```sh
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
.
```elixir
def deps do
[{:plug_graphql, "~> 0.0.7"}]
end
```
- Define a simple schema in
web/graphql/test_schema.ex
:
```elixir
defmodule TestSchema do
def schema do
%GraphQL.Schema{
query: %GraphQL.ObjectType{
name: "Hello",
fields: %{
greeting: %{
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:
```elixir
pipeline :api do
plug :accepts, ["json"]
end
```
- Mount the GraphQL endpoint as follows:
```elixir
scope "/api" do
pipe_through :api
forward "/", GraphQL.Plug.Endpoint, schema: {TestSchema, :schema}
end
```
- Start Phoenix
```sh
mix phoenix.server
```
- Open your browser to
http://localhost:4000/api?query={greeting}
and you should see something like this:
```json
{
"data": {
"greeting": "Hello, world!"
}
}
```
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!
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.