💬
How to GraphQLを試す(Mutation)
前記事
この記事は、以下の続きです。
Mutation
mutationでデータを追加、変更、削除を行います。
app/graphql/types/mutation_type.rb
は自動で作成されています。
module Types
class MutationType < Types::BaseObject
# TODO: remove me
field :test_field, String, null: false,
description: "An example field added by the generator"
def test_field
"Hello World"
end
end
end
また、graphql_tutorial_schema.rb
は、以下のようになっています。
class GraphqlTutorialSchema < GraphQL::Schema
mutation(Types::MutationType)
query(Types::QueryType)
end
引数付きリゾルバ
次に、createLink
のリゾルバを追加します。
app/graphql/mutations/base_mutation.rb
は以下となっています。
module Mutations
class BaseMutation < GraphQL::Schema::RelayClassicMutation
argument_class Types::BaseArgument
field_class Types::BaseField
input_object_class Types::BaseInputObject
object_class Types::BaseObject
end
end
app/graphql/mutations/create_link.rb
を作成します。
% touch app/graphql/mutations/create_link.rb
module Mutations
class CreateLink < BaseMutation
# arguments passed to the `resolve` method
argument :description, String, required: true
argument :url, String, required: true
# return type from the mutation
type Types::LinkType
def resolve(description: nil, url: nil)
Link.create!(
description: description,
url: url,
)
end
end
end
app/graphql/types/mutation_type.rb
を次のようにします。
module Types
class MutationType < Types::BaseObject
field :create_link, mutation: Mutations::CreateLink
end
end
Playgroundでテスト
mutationを以下のように作成しました。
mutation{
createLink(
input: {
url: "http://npmjs.com/package/graphql-tools",
description: "Best tools!",
}
){
id
url
description
}
}
応答は以下のように返ってきました。
{
"data": {
"createLink": {
"id": "3",
"url": "http://npmjs.com/package/graphql-tools",
"description": "Best tools!"
}
}
}
続きは以下。
Discussion