Install from RubyGems by adding it to your Gemfile
, then bundling.
# Gemfile
gem 'graphql'
$ bundle install
# Declare a type...
PostType = GraphQL::ObjectType.define do
name "Post"
description "A blog post"
field :id, !types.ID
field :title, !types.String
field :body, !types.String
field :comments, types[!CommentType]
end
# ...and a query root
QueryType = GraphQL::ObjectType.define do
name "Query"
description "The query root of this schema"
field :post do
argument :id, !types.ID
resolve -> (obj, args, ctx) { Post.find(args["id"]) }
end
end
# Then create your schema
Schema = GraphQL::Schema.new(query: QueryType)
See also:
- the test schema
graphql-ruby-demo
for an example schema on Rails
Execute GraphQL queries on a given schema, from a query string.
query = GraphQL::Query.new(Schema, query_string)
result_hash = query.result
# {
# "data" => {
# "post" => {
# "id" => 1,
# "title" => "GraphQL is nice"
# }
# }
# }
See also:
- query_spec.rb for an example of query execution.
queries_controller.rb
for a Rails example- Try it on heroku
- To match spec:
- Directives:
@skip
has precedence over@include
- directives on fragments: http://facebook.github.io/graphql/#sec-Fragment-Directives
- Directives:
- Field merging
- if you were to request a field, then request it in a fragment, it would get looked up twice
- graphql/graphql-js#19 (comment)
- Code clean-up
- Unify unwrapping types (It's on
TypeKind
but it's still not right) - Accept native Ruby types in definitions, then convert them to GraphQL types
- Make Schema validations run before TypeReducer
- Remove deprecated
params:
keyword
- Unify unwrapping types (It's on
- Cook up some path other than "n+1s everywhere"
- See Sangria's
project
approach (in progress)
- See Sangria's
- Implement the GraphQL spec & support a Relay front end
- Provide idiomatic, plain-Ruby API with similarities to reference implementation where possible
- Support
graphql-rails
- Say hi & ask questions in the #ruby channel on Slack or on Twitter!
- Report bugs by posting a description, full stack trace, and all relevant code in a GitHub issue.
- Features & patches are welcome! Consider discussing it in an issue or in the #ruby channel on Slack to make sure we're on the same page.
- Run the tests with
rake test
or start up guard withbundle exec guard
.
- GraphQL Spec
- Other implementations: graphql-links
graphql-ruby
+ Rails demo (src / heroku)- GraphQL Slack
Thanks to @sgwilym for the great logo! Definition API heavily inspired by @seanchas's implementation of GraphQL