Graphql-ruby objects: Difference between revisions
From wikinotes
Line 62: | Line 62: | ||
<syntaxhighlight lang="ruby"> | <syntaxhighlight lang="ruby"> | ||
class QueryRoot < GraphQL::Schema::Object | class QueryRoot < GraphQL::Schema::Object | ||
field :name, String, null: false | field :name, String, null: false | ||
def name | def name | ||
"Alex" | "Alex" | ||
end | end | ||
Line 73: | Line 71: | ||
Object resolver | Object resolver | ||
<syntaxhighlight lang="ruby"> | |||
class QueryRoot < GraphQL::Schema::Object | |||
field :name, resolver: Resolvers::Name | |||
end | |||
module Resolvers # <-- the resolver | |||
class Name < GraphQL::Schema::Resolver | |||
type String, null: false | |||
def resolve | |||
"Alex" | |||
end | |||
end | |||
end | |||
</syntaxhighlight> | |||
Object resolvers can also have arguments | |||
<syntaxhighlight lang="ruby"> | <syntaxhighlight lang="ruby"> | ||
class QueryRoot < GraphQL::Schema::Object | class QueryRoot < GraphQL::Schema::Object |
Revision as of 18:42, 6 September 2021
Documentation
type docs https://graphql-ruby.org/guides#type-definitions-guides field docs https://graphql-ruby.org/guides#fields-guides
Fields
All objects in graphql are exposed using fields.
Mutations are added as fields to the rootMutation
object,
and Queries are added to the rootQuery
object.Fields
class User < GraphQL::Schema::Object field :id, Integer, null: false # name, returntype, nilable? field :age, Integer, null: false # name, returntype, nilable? def id return 100 end def age return 30 end endParametrized Fields
USERS = [ {id: 100, name: "vaderd"}, {id: 101, name: "skywalkerl"}, ] class QueryRoot < GraphQL::Schema::Object field :user, User, null: false do |field| field.argument(:id, Integer, required: true) end def user(id:) USERS.find { |user| user[:id] == id } end endResolvers
Field resolvers are used to return results for a query.
Resolvers can be expressed as objects, or as methods matching the name of the field.Method resolver
class QueryRoot < GraphQL::Schema::Object field :name, String, null: false def name "Alex" end endObject resolver
class QueryRoot < GraphQL::Schema::Object field :name, resolver: Resolvers::Name end module Resolvers # <-- the resolver class Name < GraphQL::Schema::Resolver type String, null: false def resolve "Alex" end end endObject resolvers can also have arguments
class QueryRoot < GraphQL::Schema::Object field :name, resolver: Resolvers::Name end module Resolvers # <-- the resolver class Name < GraphQL::Schema::Resolver type String, null: false argument :id, Integer, required: true def resolve(id:) "Alex" end end end