2017-05-22 15 views
1

Graphqlでの削除突然変異の結果はどうでしょうか?私はgraphql-ruby gemを使用しています。ここに私の突然変異の例がありますが、私は応答として何を返すべきか分かりません。削除変異の結果?

Mutations::Brands::Delete = GraphQL::Relay::Mutation.define do 
    name "UpdateBrand" 
    description "Update a brand" 

    input_field :id, types.ID 

    # return_field ?? 

    resolve ->(object, inputs, ctx) { 
    brand = Brand.find(inputs[:id]) 
    brand.destroy 
    } 
end 
+0

私はベストプラクティスは、あなたが削除したものを正確に返すことだと思っています。 – mstorkson

答えて

1

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/

1

私は明確なデファクトスタンダードは7月、2017年のように存在する、と私は実装の違い(GitHubの、Yelpの、GraphCool、Shopify)の多くを見るとは思いません。

しかし、最近のGraphQL APIのいくつかを見ると、共通の傾向があるようです。主に、入力タイプと応答タイプは突然変異に特有です。たとえば、updateBrandの突然変異の場合、UpdateBrandInputと予想され、UpdateBrandPayloadという応答を返します。入力がBrandInputでなく、Brandで応答していることに注意してください。成功した場合はtrueなどスカラーブール値で、(削除変異の場合は)削除されたエンティティのidで応答することはありません。このコンベンションではcreateBrandの突然変異を持つことができ、CreateBrandInputCreateBrandPayloadの応答が得られます。

inputと​​の種類の変異を作成することで、期待して対応するフィールドに多くの柔軟性が得られます。削除あたり、DeleteBrandPayloadというレスポンスがあるかもしれませんが、ブランドの浅い(たとえばスカラーのみの)フィールドだけでなく、他の関連データ(例:clientMutationId)なども含まれます。

正直言って、 GraphQLの仕様は、あなた自身を吊るすのに十分なロープを提供しています。だから、大人の人たちがどのようにこれを展開しているかを見るのは賢明です。

関連する問題