web-dev-qa-db-ja.com

削除ミューテーションの結果?

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
12
Jimmy Baker

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/

3
eshaiju

2017年7月現在、明確なデファクトスタンダードは存在しないと思います。実装間で多くの違いが見られます(GitHub、Yelp、GraphCool、Shopify)。

ただし、最近のGraphQL APIのいくつかを見てみると、共通の傾向があるようです。主に、入力タイプと応答タイプは突然変異に固有です。したがって、たとえば、updateBrandミューテーションの場合、UpdateBrandInputを予期し、UpdateBrandPayloadレスポンスを返す可能性があります。入力はBrandInputではなく、Brandで応答することに注意してください。また、スカラーブール値(成功した場合はtrue)または削除されたエンティティのid(削除ミューテーションの場合)で応答することもできません。この規則に従って、createBrandミューテーションとCreateBrandInputおよびCreateBrandPayloadレスポンスを使用できます。

ミューテーション固有のinput型とpayload型を作成することにより、期待して応答するフィールドに多くの柔軟性をもたらします。削除ごとに、ブランドの浅い(たとえば、スカラーのみ)フィールドだけでなく、他の関連データ(たとえば、DeleteBrandPayload)なども含むclientMutationId応答が含まれる場合があります。

正直に言うと、GraphQL仕様は自分自身をぶら下げるのに十分なロープを提供していると思うので、大手の何人かがこれをどのように展開しているかを見るのは賢明です。

17
bjunc