2017-08-02 40 views
0

我阅读了所有graphql的文档,至少有4个博客解释了graphql的查询和变异概念,但是我没有在这些资源中找到什么是为什么我们必须使用查询来获取数据,为什么我们要必须使用突变来提交数据?看看他们的方案,他们看起来在描述根查询/突变,然后定义类型+解析器方面非常相似。查询和突变都是这样写的。为什么我无法在查询中提交数据,并在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); 
     } 
    } 
    }), 
}); 

回答

1

可以把所有的突变东西查询后面,就像你可以实现每个端点的一个GET RESTful框架。没有什么能阻止你。

但是,我们有GET,POST和其他HTTP动词在非graphql系统中的原因同样适用于此处。在幂等“获得一些数据”操作和副作用“改变某些东西”操作之间绘制一条明亮的红线是非常有用的。另外从实际的角度来看,graphql系统将应用程序的整个表面区域合并到一个端点中。在readwrite的东西中,这不会是最好的开发人员的人机工程学设计。一些标签需要发生。

而且,也许最重要的是,这就是Facebook如何选择实现它。

相关问题