【问题标题】:GraphQL API: mutation or query?GraphQL API:突变还是查询?
【发布时间】:2022-01-13 10:58:43
【问题描述】:

我正在开发一个 GraphQL API,其中有一个带有初步数据比较(现有数据和导入文件之间)和后续确认请求的导入功能

目前的流程是:

  1. API 使用者执行 GQL 查询 query previewImport($data: String),其中 $data 是 base64 编码的电子表格。数据在后端解析,并在数据库中插入带有 guid 的记录。最后,API 返回电子表格中的数据和数据库中的数据以及 guid 之间的差异结果。
  2. 然后前端在看到比较(创建、更新、删除)后要求用户确认导入。为此,向 API 发出请求 mutation confirmImport($guid: String),并将更改保存在数据库中。

所以我想知道:previewImport 应该是 query 还是 mutation 从 API 使用者的角度来看,它绝对是一个查询。但是在后端数据库中插入了一条记录,尽管其唯一目的是在此后不久链接到 confirmImport 请求,然后将其删除。

在 GQL Mutation spec 中说:

预计突变操作中的顶级字段会对底层数据系统产生副作用。

从技术上讲,临时记录确实会影响数据系统。但在领域方面,它不会改变对应用程序很重要的实体,所以我仍然有点摸不着头脑

【问题讨论】:

    标签: types graphql mutation


    【解决方案1】:

    我同意query previewImport 更直观,前提是预览操作是幂等的。

    query 不仅建议“读取,而不是写入”,还建议“我可以整天调用它而不会出错”。 另一方面,mutation 通常会保留更改,并在我尝试重复相同操作时通知我,无论是作为错误还是“已经处理,你这个白痴”响应。

    【讨论】:

      猜你喜欢
      • 2017-08-24
      • 2016-01-14
      • 2021-09-09
      • 2018-09-17
      • 2018-11-10
      • 2017-10-28
      • 2019-11-18
      • 2017-10-18
      • 2020-11-04
      相关资源
      最近更新 更多