删除突变的结果?
Result of a delete mutation?
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
您可以returndeleted_id或留言。如果它是关联对象,您可以 return 更新对象,如下例所示。
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
和 return 响应 UpdateBrandPayload
。注意,输入不是 BrandInput
,而响应是 Brand
。您也不会使用标量布尔值(例如 true
如果成功)或已删除实体的 id
进行响应(在删除突变的情况下)。根据这个约定,你可以有一个 createBrand
突变,一个 CreateBrandInput
和一个 CreateBrandPayload
响应。
通过创建特定于突变的 input
和 payload
类型,您可以在期望和响应的字段中拥有很大的灵活性。每次删除,您可能会有一个 DeleteBrandPayload
响应,其中不仅包括品牌的浅层(例如,仅标量)字段,还包括其他相关数据(例如,clientMutationId
)等。
老实说,我认为 GraphQL 规范给了你足够的绳索,所以看看一些大人物是如何推出它的是明智的。
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
您可以returndeleted_id或留言。如果它是关联对象,您可以 return 更新对象,如下例所示。
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
和 return 响应 UpdateBrandPayload
。注意,输入不是 BrandInput
,而响应是 Brand
。您也不会使用标量布尔值(例如 true
如果成功)或已删除实体的 id
进行响应(在删除突变的情况下)。根据这个约定,你可以有一个 createBrand
突变,一个 CreateBrandInput
和一个 CreateBrandPayload
响应。
通过创建特定于突变的 input
和 payload
类型,您可以在期望和响应的字段中拥有很大的灵活性。每次删除,您可能会有一个 DeleteBrandPayload
响应,其中不仅包括品牌的浅层(例如,仅标量)字段,还包括其他相关数据(例如,clientMutationId
)等。
老实说,我认为 GraphQL 规范给了你足够的绳索,所以看看一些大人物是如何推出它的是明智的。