GraphQL:成功突变后如何发出警告?

2023-12-23

让我们想象一下我有一个createPost插入新帖子的突变。在典型的应用程序中,该突变可以:

  • 成功,返回一个Post.
  • 失败,抛出错误(我使用阿波罗错误 https://github.com/thebigredgeek/apollo-errors来处理这个)。

我想要实现的是一个中间场景,其中突变成功(返回Post); but also以某种方式向用户返回警告(例如Your post is similar to post XYZ或类似)。

实现这个的一个好的 GraphQL 模式是什么?添加一个warning场到Post类型似乎有点奇怪,但话又说回来,我不知道如何返回两个Post and a Warning在同一个突变中?有任何想法吗?

(请注意,我使用此场景作为示例,我对返回额外突变后数据的一般模式感兴趣,而不是专门查找类似的帖子)


我的所有突变都返回包装有效负载类型而不是单个值类型(例如Post在你的情况下),我也不会抛出 GraphQL,除非它是一个真正的系统错误 - 如果它是用户输入的结果或者是其他预期的情况,我会将其建模为返回类型。

返回包装有效负载通常被认为是最佳实践,因为 a) 您的突变应该返回入口点一切b) 它使您能够轻松地在以后向返回类型添加新字段。

请记住,突变本质上是一个函数,它接受一些输入数据和当前图,并返回一个新图。从类似 REST 的 CRUD 操作的角度来思考通常是错误的。

type CreatePostError = {
    // Whatever you want
}

type CreatePostSuccess = {
    post: Post!
    warning: String
}

union CreatePostPayload = CreatePostSuccess | CreatePostError

mutation {
    // Other mutations
    createPost(/* args /*): CreatePostPayload
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

GraphQL:成功突变后如何发出警告? 的相关文章

  • graphql,当有“add”和“update”突变时如何设计输入类型?

    这是我的要求 添加 突变 每个字段 或称为标量 BookInput输入类型应该有额外的类型修饰符 验证非空值 这意味着当我添加一本书时 参数必须有title and author场 比如 title angular author noval
  • Nestjs Apollo graphql上传标量

    我正在使用 Nestjs graphql 框架 我想使用 apollo 标量上传 我已经能够在另一个不包含 Nestjs 的项目中使用标量 schema graphql App module ts注册graphql GraphQLModul
  • 连接 Apollo 和 mongodb

    我想将我的 Apollo 服务器与我的 mongoDB 连接 我知道那里有很多例子 但我陷入了异步部分 没有找到解决方案或示例 这很奇怪 我完全错了吗 我从 next js 的示例开始https github com zeit next j
  • 在字段解析器上从父节点获取数据

    所以我想做的是GraphQL如果可能的话像这样 people id name acted id title coactors name 所以我正在做的就是找演员 人 然后找他们演的电影 效果很好 所以我正在努力寻找那部电影的合作演员 我正在
  • Graphql - 获取完整的子对象,如果不存在则返回 null

    我有一个 graphql 查询 它得到一个Meeting对象与Client object type Meeting address String client Client type Client displayName String Th
  • graphql 中的 Console.log 解析器数据

    我正在尝试在 graphql 应用程序中 console log 解析器 graphiql 部分可以工作 我可以启动服务器并查看 graphql 仪表板 然后使用根查询在浏览器窗格中检索结果 但我无法在浏览器控制台中 console log
  • 使用 buildSchema 时如何访问字段解析器内父解析器的值?

    当我们使用 graphqlHTTP 时 传递给解析方法的第一个参数实际上是客户端查询传递的参数 而不是 root 这对于查询解析器来说很好 但是对于字段解析器需要知道父级值的用例 如何实现这一点 type Person name Strin
  • 动态 GraphQL 模式?

    我有一个突变 将提交表单数据 该数据可能会根据您填写的表单而有所不同 表单将会很多 并且它们将共享相同的 步骤 每个表单由 1 个或多个页面 步骤组成 因此 我们可能有这些可重用的步骤 最喜欢的水果 出生日期 名和姓 还有这两种形式 通用信
  • Apollo 更新查询未调用?

    我正在 GitHunt React 和 GitHunt API 中研究 Apollo pub sub 当我运行这些应用程序并输入新评论时 评论将通过调用提交来保存 然后 updateQueries 代码块在此处运行 const Commen
  • type-graphql:如何知道Resolver返回了哪些字段

    我正在编写一个使用 type graphql 的后端应用程序 GraphQL 架构包括Folder键入如下所示 type Folder id ID name String rules Rule parent Group Rule and G
  • 如何使用 gatsby-image 不裁剪地显示图像?

    实例 图像可能加载缓慢 https suhadolnik photo surge sh portreti https suhadolnik photo surge sh portreti 我正在使用 GatsbyJS 制作一个摄影网站 并使
  • 使用express记录所有GraphQL响应

    我成功地设置了记录 graphQL 错误 app use graphql graphqlHTTP request gt return schema rootValue request formatError error gt const p
  • apollo 客户端从存储中删除而不发生突变

    我需要通过 id 从本地存储中删除一条 记录 而不使用突变 因为服务器不支持突变 我尝试像这样手动访问商店 delete this apolloClient store getState apollo data 1112 这会删除记录 但是
  • Apollo 服务器:将参数传递给嵌套解析器

    我的 GraphQL 查询如下所示 p1 property someArgs some value id nestedField id moreNestedField id 在服务器端 我使用 Apollo Server 我有一个解析器pr
  • 使用 JWT 通过 Asp.net core 进行 GraphQL 身份验证

    我正在使用 NET 的 GraphQL https www nuget org packages GraphQL 2 0 0 alpha 912graphql 的包 但我无法理解如何在 graphql 查询或突变中使用 JWT 进行身份验证
  • NestJS 与 Apollo 数据源

    我一直在尝试重新创建阿波罗教程 https www apollographql com docs tutorial data source 与 NestJS 但是当我尝试使用apollo datasource rest https www
  • GraphQL:对象名称在解析器中定义,但不在模式中定义

    我想使用 graphql 定义一个突变 我的突变是获取一个对象作为参数 因此 我使用 GraphQLObjectType 在架构和解析器中定义了新对象 但是我收到这个错误 错误 Agreement name 在解析器中定义 但不在架构中定义
  • AWS AppSync 授权

    我计划使用 AWS Appsync 迁移 lambda 函数中的 graphQL 终端节点 该函数由 API 网关的 POST 触发 我研究 AppSync 主要是因为订阅 我无法使用 Lambda 函数创建订阅 我的身份验证机制基于 Au
  • 输入对象类型“TypeName”必须定义一个或多个字段

    我正在尝试NestJS and TypeGraphQL 我有一个猫的模型示例 import Document from mongoose import ObjectType InputType Field ID from type grap
  • Apollo graphql 将标头设置为 authmiddleware 不起作用

    我正在使用react native和apollo客户端 如果我尝试通过存储在AsyncStorage中的jwt设置标头 它似乎不起作用 其他不需要标头的解析器工作得很好 我的代码如下所示 import ApolloClient from a

随机推荐

  • Rails:文件路径

    我里面有app一个名为csv在这个目录中我有一个名为names csv我想用File read path string 函数来读取文件 文件的相对路径是什么 file File join Rails root app csv names c
  • 将当前时间添加到日期时间?

    我有一个代表日期的字符串 它从 DropDownList 中返回 该字符串是 2010 年 8 月 27 日 例如 现在我想将当前时间添加到此并将其解析为 Datetime 所以最终它应该是一个 DateTime 类似2010年8月27日
  • 如何使用 ts.transform 将附加语句注入到函数中

    我使用 Typescript 编译器 API ts transform ts updateFunctionDeclaration 在现有源文件中的函数开头注入附加语句 这非常有效 除了当我打印转换后的代码 使用 ts Printer 时 原
  • Dart - 将纪元以来的毫秒数(UNIX 时间戳)转换为人类可读的时间

    有没有一种好方法可以将纪元 例如 1486252500000 13 位 以来的毫秒数格式化为人类可读的格式 DateTime自纪元以来确实有一个毫秒的命名构造函数 https api dartlang org stable 1 24 2 d
  • 命名方法规则简单,兼容ARC命名约定

    我很难理解 ARC 的命名约定 我一直使用 ARC 进行编码 我想这就是原因 1 类方法 我应该为以下方法选择什么名称 这两个名称在内存管理方面有什么区别 这个名字 MyObject newObjectFrom MyObject anObj
  • 将 python 脚本的输出获取到 Jenkinsfile 中的变量中

    我有一个 Python 脚本 它在标准输出上返回一个字符串 python 脚本返回的值可以收集在 bash 脚本中 如下所示 bin bash outputString my python script py some parameter
  • 函数式编程和依赖倒置:如何抽象存储?

    我正在尝试创建一个具有较低级别库的解决方案 该库将知道在调用某些命令时需要保存和加载数据 但保存和加载函数的实现将在特定于平台的项目中提供它引用较低层的库 我有一些模型 例如 type User UserID UserID Situatio
  • 如何使用boost-spirit将结果放入STL图?

    include
  • Eclipse 在 src/main/resources 中添加了 ** 排除模式:如何读取资源文件?

    我使用 Eclipse Oxygen 2 Release 4 7 2 和标准 src main resources 文件夹创建了一个简单的 Maven 项目 并将其添加到类路径中 问题是 Eclipse 添加了一个排除模式 到 src ma
  • 播放 .wav 文件

    我正在使用 Visual Studio 2010 Express 我正在尝试编写一个简单的程序 该程序将重复波形文件 5 次 我正在运行 Windows XP SP3 据我所知 这是 include stdafx h include
  • Meteor:自定义允许和拒绝规则的错误消息

    我正在寻求标准化 Meteor 中允许和拒绝规则的错误消息 我不想在客户端的回调中定义错误 而是希望服务器以正确的错误消息进行响应 这样我只需定义它们一次 来自允许 拒绝的文档 如果函数认为应该允许该操作 则它们应该返回 true 否则它们
  • Solr 搜索字段中的值数组

    我是 Solr 搜索的新手 任何人都可以帮助我解决我的问题 我有值数组 我想将其添加到 solr 查询中 例如 query gt setQuery field 1 2 5 当我执行此操作时 我收到此错误消息 org apache solr
  • 使用文本和值填充 DropDownList

    我在 ASP NET Webforms 中有一个下拉列表 我想计算某一年是多少年前 在第一行中 2002 是当前年份 9 并且必须是值 而 9 是 visibel 文本 显示 2002 年是多少年前 2002 9 2003 8 2004 7
  • 是否可以阻止 PWA 仅在特定路由上使用缓存?

    自从我将 React 应用程序配置为 PWA 以来 我开始遇到谷歌身份验证问题 当用户单击 使用 Google 登录 时 应该会访问此端点 route GET api users auth google desc Authenticate
  • 在颤振中我如何检查位置是否启用?

    当用户输入没有启用位置的谷歌地图页面时 我遇到问题 地图不会更新 所以我想检查用户是否事先启用了位置 所以我需要一个函数 如果启用了位置 则返回 true 如果没有启用 则返回 false use 权限处理插件 https pub dev
  • 如何在 Dart 中查找集合的所有子集?

    我需要获取数组的所有可能的子集 假设我有这个
  • 为什么我在 Google 地图 Android API 上收到签名无效的信息?

    我的应用程序在 5 1 版本的设备上可以正常进行位置更新 从那时起 我做了两件事 生成签名的 apk 尝试将其部署到 6 0 设备 我不知道发生了什么 但现在 google api 即使在我原来的设备上也无法工作 这是错误日志的一部分 我认
  • 自定义 UISlider

    如何自定义UISlider 更改样式 背景 你可以通过this http www raywenderlich com 4344 user interface customization in ios 5自定义控件的教程 要自定义 UISli
  • 触发一次后关闭事件监听器

    我有一个脚本可以触发一个提供免费下载的弹出框 当用户的鼠标离开页面时它会触发 显然不适用于移动设备 我已经有一个可行的解决方案 在我的脚本中 我设置了一个 cookie 来停用脚本 30 分钟 并且该部分有效 如果我刷新页面 弹出窗口不会再
  • GraphQL:成功突变后如何发出警告?

    让我们想象一下我有一个createPost插入新帖子的突变 在典型的应用程序中 该突变可以 成功 返回一个Post 失败 抛出错误 我使用阿波罗错误 https github com thebigredgeek apollo errors来