Graphqlの削除ミューテーションの結果はどうなりますか?私はgraphql-Ruby gemを使用しています。これが私の突然変異の例ですが、応答として何を返す必要があるのかわかりません。
Mutations::Brands::Delete = GraphQL::Relay::Mutation.define do
name "DeleteBrand"
description "Delete a brand"
input_field :id, types.ID
# return_field ??
resolve ->(object, inputs, ctx) {
brand = Brand.find(inputs[:id])
brand.destroy
}
end
Deleted_idまたはメッセージを返すことができます。関連付けられているオブジェクトの場合、以下の例のように更新されたオブジェクトを返すことができます。
Destroy = GraphQL::Relay::Mutation.define do
name 'DestroyComment'
description 'Delete a comment and return post and deleted comment ID'
# Define input parameters
input_field :id, !types.ID
# Define return parameters
return_field :deletedId, !types.ID
return_field :article, ArticleType
return_field :errors, types.String
resolve ->(_obj, inputs, ctx) {
comment = Comment.find_by_id(inputs[:id])
return { errors: 'Comment not found' } if comment.nil?
article = comment.article
comment.destroy
{ article: article.reload, deletedId: inputs[:id] }
}
http://tech.eshaiju.in/blog/2017/05/15/graphql-mutation-query-implementation-Ruby-on-Rails/
2017年7月現在、明確なデファクトスタンダードは存在しないと思います。実装間で多くの違いが見られます(GitHub、Yelp、GraphCool、Shopify)。
ただし、最近のGraphQL APIのいくつかを見てみると、共通の傾向があるようです。主に、入力タイプと応答タイプは突然変異に固有です。したがって、たとえば、updateBrand
ミューテーションの場合、UpdateBrandInput
を予期し、UpdateBrandPayload
レスポンスを返す可能性があります。入力はBrandInput
ではなく、Brand
で応答することに注意してください。また、スカラーブール値(成功した場合はtrue
)または削除されたエンティティのid
(削除ミューテーションの場合)で応答することもできません。この規則に従って、createBrand
ミューテーションとCreateBrandInput
およびCreateBrandPayload
レスポンスを使用できます。
ミューテーション固有のinput
型とpayload
型を作成することにより、期待して応答するフィールドに多くの柔軟性をもたらします。削除ごとに、ブランドの浅い(たとえば、スカラーのみ)フィールドだけでなく、他の関連データ(たとえば、DeleteBrandPayload
)なども含むclientMutationId
応答が含まれる場合があります。
正直に言うと、GraphQL仕様は自分自身をぶら下げるのに十分なロープを提供していると思うので、大手の何人かがこれをどのように展開しているかを見るのは賢明です。