layout | doc_stub | search | title | section | desc |
---|---|---|---|---|---|
guide |
false |
true |
Getting Started |
Other |
Start here! |
You can install graphql
from RubyGems by adding to your application's Gemfile
:
# Gemfile
gem "graphql"
Then, running bundle install
:
$ bundle install
On Rails, you can get started with a few GraphQL generators:
# Add graphql-ruby boilerplate and mount graphiql in development
$ rails g graphql:install
# You may need to run bundle install again, as by default graphiql-rails is added on installation.
$ bundle install
# Make your first object type
$ rails g graphql:object Post title:String rating:Int comments:[Comment]
Or, you can build a GraphQL server by hand:
- Define some types
- Connect them to a schema
- Execute queries with your schema
Types describe objects in your application and form the basis for GraphQL's type system.
# app/graphql/types/post_type.rb
module Types
class PostType < Types::BaseObject
description "A blog post"
field :id, ID, null: false
field :title, String, null: false
# fields should be queried in camel-case (this will be `truncatedPreview`)
field :truncated_preview, String, null: false
# Fields can return lists of other objects:
field :comments, [Types::CommentType],
# And fields can have their own descriptions:
description: "This post's comments, or null if this post has comments disabled."
end
end
# app/graphql/types/comment_type.rb
module Types
class CommentType < Types::BaseObject
field :id, ID, null: false
field :post, PostType, null: false
end
end
Before building a schema, you have to define an entry point to your system, the "query root":
class QueryType < GraphQL::Schema::Object
description "The query root of this schema"
field :post, resolver: Resolvers::PostResolver
end
Define how this field is resolved by creating a resolver class:
# app/graphql/resolvers/post_resolver.rb
module Resolvers
class PostResolver < BaseResolver
type Types::PostType, null: false
argument :id, ID
def resolve(id:)
::Post.find(id)
end
end
end
Then, build a schema with QueryType
as the query entry point:
class Schema < GraphQL::Schema
query Types::QueryType
end
This schema is ready to serve GraphQL queries! {% internal_link "Browse the guides","/guides" %} to learn about other GraphQL Ruby features.
You can execute queries from a query string:
query_string = "
{
post(id: 1) {
id
title
truncatedPreview
}
}"
result_hash = Schema.execute(query_string)
# {
# "data" => {
# "post" => {
# "id" => 1,
# "title" => "GraphQL is nice"
# "truncatedPreview" => "GraphQL is..."
# }
# }
# }
See {% internal_link "Executing Queries","/queries/executing_queries" %} for more information about running queries on your schema.
If you're building a backend for Relay, you'll need:
- A JSON dump of the schema, which you can get by sending
GraphQL::Introspection::INTROSPECTION_QUERY
- Relay-specific helpers for GraphQL, see the {% internal_link "Connection guide", "/pagination/connection_concepts" %}, {% internal_link "Mutation guide", "mutations/mutation_classes" %}, and {% internal_link "Object Identification guide", "/schema/object_identification" %}.
Apollo Client is a full featured, simple to use GraphQL client with convenient integrations for popular view layers. You don't need to do anything special to connect Apollo Client to a graphql-ruby
server.
GraphQL.js Client is a tiny client that is platform- and framework-agnostic. It works well with graphql-ruby
servers, since GraphQL requests are simple query strings transported over HTTP.