微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

GraphQL:接受缺少请求字段的查询响应?

如何解决GraphQL:接受缺少请求字段的查询响应?

我有一个 Apollo GraphQL 查询来从我的后端获取电影,如果检测到用户具有打开的会话(身份验证 cookie),则后端有条件地向响应添加额外的字段。

问题是前端使用相同的查询,无论用户是否登录,并始终请求一个用户相关字段,指示电影是否在用户的收藏中,并执行此操作即使没有用户登录,也是由后端决定的。

当然,当没有用户登录并且前端请求该字段时,后端决定不发送它而只发送公共字段标题、流派...)并且请求以错误结束。我有两个解决方案,但我都不喜欢:

  1. Add a variable to the query with @include,表示用户是否登录获取字段 有条件的。 我不喜欢它,因为它看起来是多余的,因为后端已经通过以下方式自动检查了 在上下文中查找活动会话(请求中包含 cookie)。如果我可以在前端查询添加变量,这个解决方案就可以了。

  2. Make the backend always send the field,即使没有用户登录在这种情况下 它发送空或假。我不喜欢它,因为它是不必要的流量,特别是考虑 我计划添加许多其他特定于用户的字段(评级等),并且我希望许多用户能够 使用未经身份验证的应用。


TLDR

所以我的问题是:

是否有任何方法可以在 GraphQL 查询中请求一个字段并接受响应,即使它根本不包含该字段(甚至未定义),同时仍然需要其他字段?。仅使用一个查询解决此问题的最佳方法是什么?

我正在尝试使用单个查询来做到这一点,以避免在我的前端链接查询

解决方法

如果我理解正确,我认为您可以为依赖于用户的字段创建一个解析器。

我不完全知道架构,但它看起来像:

type Movie {
   title: String
   ...more fields here
   userSpecificInformation: UserSpecificInformation
}

然后为 UserSpecificInformation 定义解析器。

有关详细信息,请查看 https://graphql.org/learn/execution/

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。