[英]Why can't I submit data in a query, and get data in a mutation in GraphQL?
我通读了graphql的所有文档和至少4个博客,解释了graphql的查询和突变概念,但是在这些资源中我都没有发现为什么我们必须使用查询来获取数据,以及为什么必须使用变异提交数据?
观察他们的方案,它们在描述根查询/突变,然后定义类型+解析器方面看起来非常相似。 查询和变异都是以这种方式编写的。
当组成看起来非常相似时,为什么不能使用突变获取数据或使用查询来提交数据呢?
查询 :
const RootQuery = new GraphQLObjectType({
name: 'Root',
fields: () => ({
viewer: {
type: Viewer,
resolve: () => getViewer()
}
})
});
变异 :
var MutationType = new GraphQLObjectType({
name: 'ArticleGraph Mutations',
description: 'These are the things we can change',
fields: () => ({
deleteArticle: {
type: ArticleType,
description: 'Delete an article with id and return the article that was deleted.',
args: {
id: { type: new GraphQLNonNull(GraphQLInt) }
},
resolve: (value, { id }) => {
return ArticleServices.delete(id);
}
}
}),
});
您可以将所有变异内容放在查询之后,就像您可以在RESTful框架中将每个端点实现为GET
。 没什么能阻止你的。
但是在非graphql系统中使用GET
, POST
和其他HTTP动词的原因也适用于此。 在幂等的“获取一些数据”操作与副作用“更改某些内容”操作之间划一条鲜红的线非常有用。
同样从实际的角度来看,graphql系统将应用程序的整个表面积组合到单个端点中。 它不会是最大的开发者的人体工程学设计的任意混合read
和write
东西。 一些标记需要发生。
而且,也许最重要的是,这就是Facebook选择实施的方式。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.