【问题标题】:Why can't I submit data in a query, and get data in a mutation in GraphQL?为什么我不能在查询中提交数据,并在 GraphQL 的突变中获取数据?
【发布时间】:2018-01-09 01:29:42
【问题描述】:

我阅读了所有 graphql 的文档和至少 4 个解释 graphql 查询和变异概念的博客,但是我在这些资源中没有发现为什么我们必须使用查询来获取数据,以及为什么要使用我们必须使用突变来提交数据?

看看他们的方案,他们在描述根查询/突变,然后定义类型+解析器方面看起来非常相似。查询和突变都是这样写的。

为什么在组合看起来很相似的情况下不能使用mutation来获取数据,或者使用query来提交数据?

查询

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);
      }
    }
  }),
});

【问题讨论】:

    标签: javascript reactjs graphql


    【解决方案1】:

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

    但同样的原因,我们在非 graphql 系统中有 GETPOST 和其他 HTTP 动词也适用于此。在幂等的“get me some data”操作和副作用的“change some stuff”操作之间划一条鲜红的线非常有用。

    同样从实际的角度来看,graphql 系统将应用程序的整个表面区域组合成一个端点。任意混合readwrite 的东西并不是最伟大的开发人员人体工程学。需要进行一些标记。

    而且,也许最重要的是,这就是 Facebook 选择实施它的方式。

    【讨论】:

      猜你喜欢
      • 2019-11-24
      • 1970-01-01
      • 2020-03-28
      • 2020-08-31
      • 1970-01-01
      • 2018-02-05
      • 2015-09-24
      • 1970-01-01
      • 2021-10-27
      相关资源
      最近更新 更多