这个 GraphQL 中的 `... on` 在做什么?

sch*_*oon 13 graphql

我试图模仿某些 GraphQL 的功能,但我无权运行原始版本。它的形式如下:

query {
  dataSources(dataType: Ais) {
    ... on AisDataSource {
      messages(filter: {broadcastType: Static}) {
        ... on AisStaticBroadcast {
          field1
          field2
Run Code Online (Sandbox Code Playgroud)

(我省略了右括号)。

我的理解是... on要么包含一个片段(这里没有),要么在替代方案之间进行选择(但这些是嵌套的)。那么这个查询是错误的,还是还有更多的问题... on

Dan*_*den 22

\n
{\n  user {\n    ... on User {\n      id\n      username\n    }\n  }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

和这个

\n
{\n  user {\n    ...UserFragment\n  }\n}\n\nfragment UserFragment on User {\n  id\n  username\n}\n
Run Code Online (Sandbox Code Playgroud)\n

是等价的。在这两种情况下,您都使用片段。在第一个示例中,我们简单地将片段称为内联片段

\n

当请求返回复合类型(对象、接口或联合)的字段时,您必须为返回类型指定一个选择集或一个或多个字段。由于片段必须包含类型条件on关键字加类型名称),因此它们可用于根据运行时实际返回的类型指定不同的选择集。

\n
{\n  user {\n    ...RegularUserFragment\n    ...AdminFragment\n  }\n}\n\nfragment RegularUserFragment on RegularUser {\n  id\n  username\n}\n\nfragment AdminFragment on Admin {\n  id\n  username\n  accessLevel\n}\n
Run Code Online (Sandbox Code Playgroud)\n

我们所说的是“如果运行时的类型是这样,则返回这组字段”。如果片段内的任何字段也返回复合类型,则这些字段还必须指定 \xe2\x80\x94 的选择集,这意味着可以在这些选择集中使用其他片段。

\n