GraphQL:接受缺少请求字段的查询响应?
Posted
技术标签:
【中文标题】GraphQL:接受缺少请求字段的查询响应?【英文标题】:GraphQL: Accepting a query response with a missing requested field? 【发布时间】:2021-07-02 05:28:32 【问题描述】:我有一个 Apollo GraphQL 查询来从我的后端获取电影,如果检测到具有打开会话的用户(身份验证 cookie),后端有条件地向响应中添加额外字段。
问题是前端使用相同的查询用户是否登录,并且总是请求一个用户相关字段来指示电影是否在用户的收藏中,并且这样做即使没有用户登录,也是由后端决定的。
当然,当没有用户登录并且前端请求该字段时,后端决定不发送它并且只发送公共字段(标题,流派......)并且请求以错误结束。我有两种解决方案,但我都不喜欢:
Add a variable to the query with @include
,表示用户是否登录获取字段
有条件的。
我不喜欢它,因为它看起来是多余的,因为后端已经自动检查了
在上下文中查找活动会话(请求中包含 cookie)。如果我可以在前端查询中添加变量,这个解决方案就可以了。
Make the backend always send the field
,即使没有用户登录,在这种情况下
它发送它为空或错误。我不喜欢它,因为它是不必要的流量,特别考虑
我计划添加许多其他用户特定字段(评级等),并且我希望许多用户能够
使用未经身份验证的应用。
TLDR
所以我的问题是:
是否有任何方法可以在 GraphQL 查询中请求一个字段并接受响应,即使它根本不包含该字段(甚至未定义),同时仍需要其他字段?仅使用一个查询来解决此问题的最佳方法是什么?
我正在尝试使用单个查询来执行此操作,以避免在我的前端链接查询。
【问题讨论】:
【参考方案1】:如果我理解正确,我认为您可以为依赖于用户的字段创建解析器。
我不确切知道架构,但它看起来像:
type Movie
title: String
...more fields here
userSpecificInformation: UserSpecificInformation
然后为 UserSpecificInformation 定义解析器。
欲了解更多信息,请查看https://graphql.org/learn/execution/
【讨论】:
以上是关于GraphQL:接受缺少请求字段的查询响应?的主要内容,如果未能解决你的问题,请参考以下文章
如何在graphql中获取响应中的所有字段而不在查询中传递任何字段名称
我可以通过 graphQL 查询多次查询 GraphQL 单一响应吗?