既不是突变也不是查询的 Apollo/GraphQL 动作

Posted

技术标签:

【中文标题】既不是突变也不是查询的 Apollo/GraphQL 动作【英文标题】:Apollo/GraphQL actions that are neither mutations nor queries 【发布时间】:2019-11-20 01:07:46 【问题描述】:

有时您需要 API 来执行不涉及检索或操作数据的操作。例如,发送“忘记密码”电子邮件或与第三方 API 交互。

Apollo(或 GraphQL 本身)是否有推荐的方法来实现这一点?

如果不是,有哪些解决方案可以在实现这一目标的同时仍然利用 Apollo 的优势(例如架构/类型检查)?

【问题讨论】:

【参考方案1】:

查询和突变之间的区别是mostly academic。虽然规范将突变定义为“先写后取”,但您可以将查询视为idempotent and side-effect free,而突变是任何东西,嗯,不是。从这个意义上说,密码重置请求可能不会更改数据库中的任何内容,但它肯定不会没有副作用,因此应该是一种突变。

根据经验,任何可以被描述为操作(“create”、“update”、“reset”、“send”等)的东西都应该是一个mutation。这也影响到客户端的使用,因为许多客户端(即 Apollo)期望突变的使用方式与客户端查询不同。

【讨论】:

以上是关于既不是突变也不是查询的 Apollo/GraphQL 动作的主要内容,如果未能解决你的问题,请参考以下文章

既不是 URL 也不是 URN 的 URI 是不是存在?

通过特定查询或突变重置缓存

MySQL:查找总价既不是最高也不是最低的产品类别?

既不是句法也不是语义的错误?

C下标值既不是数组也不是指针也不是向量

对于既不是分类也不是回归的事物,正确的术语是啥?