我阅读了所有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);
}
}
}),
});
答案 0 :(得分:1)
你可以将所有变异的东西放在查询后面,就像你可以在RESTful框架中将每个端点实现为GET
一样。什么都没有阻止你。
但是,我们在非graphql系统中使用GET
,POST
和其他HTTP谓词的原因与此类似。在幂等“获取一些数据”操作和有效“改变某些东西”操作之间划出一条鲜红色的线是非常有用的。
同样从实际角度来看,graphql系统将应用程序的整个表面区域组合到一个端点中。在read
和write
内任意混合使用它不是最好的开发人员工效学。有些标签需要发生。
也许最重要的是,这就是Facebook选择实施它的方式。