0

我是 GraphQL 的新手,我想知道如何在没有可能的通配符 (*) ( https://github.com/graphql/graphql-spec/issues/127 ) 的情况下探索 API。

我目前正在使用 GraphQL 设置无头 Craft CMS,但我真的不知道我的数据是如何嵌套的。

使用 REST API 的事件我没有机会只获取所有数据,因为我必须设置所有端点,因此我还必须知道所有字段名称。

那么我怎样才能轻松地探索我的 CraftCMS 数据结构呢?

感谢您对此的任何提示。

干杯

佣兵

------ 编辑 ------- 如果我使用@simonpedro 的建议:

{
  __schema {
    types {
      name
      kind
      fields {
        name
      }
    }
  }
}

我可以看到很多类型(?)/字段(?)......例如我看到:

{
      "name": "FlexibleContentTeaser",
      "kind": "OBJECT",
      "fields": [
        {
          "name": "id"
        },
        {
          "name": "enabled"
        },
        {
          "name": "teaserTitle"
        },
        {
          "name": "text"
        },
        {
          "name": "teaserLink"
        },
        {
          "name": "teaserLinkConnection"
        }
      ]

但现在我想知道teaserLink 的结构如何。我以某种方式发现 teaserLink (它是一个类型为 的字段Entries,我可以在其中链接到另一个页面)具有属性url& title

但是我将如何设置查询来探索其中可用的属性teaserLink

我尝试了各种查询,但我总是遇到这样的消息: GraphiQL 警告

如果有人可以给我另一个指针,我会很高兴如何找出我可以实际查询的属性...

谢谢

4

1 回答 1

1

就我而言,目前没有具有该功能的 graphql 实现。但是,如果您要做的是探索“数据结构”,即模式,则应该使用模式自省,这是为此考虑的(探索 graphql 模式)。例如,一个简单的 graphql 自省查询将是这样的:

{
  __schema {
    types {
      name
      kind
      fields {
        name
      }
    }
  }
}

参考: - https://graphql.org/learn/introspection/

更新编辑:

你想要做的我认为如下:进行这样的查询

{
  __schema {
    types {
      name
      kind
      fields {
        name
        type {
          fields {
            name
          }
        }
      }
    }
  }
}

然后找到希望的类型字段以从中获取更多信息(字段)。像这样的东西(我不知道这是否有效,只是一个想法):

const typeFlexibleContentTeaser = data.__schema.types.find(t => t === "FlexibleContentTeaser")

const teaserLinkField = typeFlexibleContentTeaser.fields.find(f => f.name === "teaserLink")

const teaserLinkField = teaserLinkField.type.fields;

即,您必须递归地遍历该type字段。

于 2019-07-22T23:53:45.833 回答