【发布时间】:2017-02-17 17:04:24
【问题描述】:
拥有 GraphQL 突变的查看器是一种好习惯吗?从理论上讲,这对我来说是有意义的,因为如果您没有登录等,某些突变终点不应该是可能的。
但是当我在网络上看到示例时,我只看到 GraphQL 查看器用于查询的实现。对于突变,我没有看到任何查看器的实现。例如,GitHub API 没有查看所有突变的查看器。
【问题讨论】:
标签: graphql graphql-js
拥有 GraphQL 突变的查看器是一种好习惯吗?从理论上讲,这对我来说是有意义的,因为如果您没有登录等,某些突变终点不应该是可能的。
但是当我在网络上看到示例时,我只看到 GraphQL 查看器用于查询的实现。对于突变,我没有看到任何查看器的实现。例如,GitHub API 没有查看所有突变的查看器。
【问题讨论】:
标签: graphql graphql-js
viewer 字段对于突变或查询都不是一个好习惯。它是 Facebook 开源之前的遗留 GraphQL 平台的残余,它不允许在根查询字段上使用参数。这意味着所有字段都需要向下移动一级,低于viewer。
目前在 GraphQL 中进行身份验证的方法,至少在 JavaScript 实现中,是通过基于 HTTP 标头之类的内容获取用户数据并将其放在 context 上,如下所述:http://graphql.org/learn/authorization/
因此,没有理由对突变或查询进行查看器。大多数 GraphQL 客户端并不介意,但是在查询中使用它可能有意义的一种情况是,如果您使用的是 Relay 0.x,它继承了 Facebook 的一些遗留 GraphQL 限制。希望 Relay 的未来版本将删除此要求。
有关其他来源,请阅读 GraphQL 的原始创建者之一 Lee Byron 的 this comment。
【讨论】:
viewer 是不好的做法。许多现代应用程序中的大量数据与查看这些数据的人的上下文密切相关。例如。我的 facebook 朋友和你的不一样。在这种情况下,拥有可以正确限制子查询范围的根查看器字段会很方便。诸如搜索之类的事情也经常与搜索者的上下文联系在一起。您能否提供一些资源,其中 Relay 说查看器的概念只是因为遗留原因而存在?