使用GraphQL的自省查询
来自菜鸟教程
使用 GraphQL,您可以运行自省查询以了解 GraphQL 模式的可用字段和类型。 这种自省能力也使 GraphiQL 能够提供有关架构和自动完成的文档。
让我们使用 Star Wars SWAPI 公共 API 端点来运行一些自省查询。
__类型
首先让我们使用内置的 __type 运行查询来查询电影类型:
query FilmType {
__type(name: "Film") {
kind
name
fields {
name
description
type {
name
}
}
}
}
- Kind 为我们提供类型的枚举值,如 OBJECT、SCALAR 或 INTERFACE。
- Name 为我们提供了类型的名称。
- 描述,好吧,给我们描述!
这是响应的样子:
{
"data": {
"__type": {
"kind": "OBJECT",
"name": "Film",
"fields": [
{
"name": "title",
"description": "The title of this film.",
"type": {
"name": "String"
}
},
{
"name": "episodeID",
"description": "The episode number of this film.",
"type": {
"name": "Int"
}
},
...
请注意这里使用内置的 __type(类型为 __Type)来获取有关特定对象或接口的类型的信息。
这是另一个使用片段来了解有关特定类型的更多信息的示例:
query LearnAboutFilm {
__type(name: "Film") {
...AboutType
}
}
fragment AboutType on __Type {
fields {
name
description
args {
name
description
}
}
interfaces {
name
description
}
inputFields {
name
description
}
possibleTypes {
kind
name
fields {
name
description
type {
kind
name
description
}
}
}
}
__schema
使用 __schema 我们可以向服务器询问模式本身。 让我们看一个例子:
query LearnAboutSchema {
__schema {
types {
name
kind
}
queryType {
fields {
name
description
}
}
}
}
和回应:
{
"data": {
"__schema": {
"types": [
{
"name": "Root",
"kind": "OBJECT"
},
{
"name": "String",
"kind": "SCALAR"
},
{
"name": "Int",
"kind": "SCALAR"
},
...
"queryType": {
"fields": [
{
"name": "allFilms",
"description": null
},
{
"name": "film",
"description": null
},
...
__typename
__typename 可用作常规查询的一部分,以查询特定字段的类型:
query LearnAboutFilm {
allFilms {
films {
__typename
title
}
}
film (id: "ZmlsbXM6Mw==") {
__typename
title
}
starship(id: "c3RhcnNoaXBzOjc1") {
__typename
name
model
}
}
这是回应:
{
"data": {
"allFilms": {
"films": [
{
"__typename": "Film",
"title": "A New Hope"
},
{
"__typename": "Film",
"title": "The Empire Strikes Back"
},
...
]
},
"film": {
"__typename": "Film",
"title": "Return of the Jedi"
},
"starship": {
"__typename": "Starship",
"name": "V-wing",
"model": "Alpha-3 Nimbus-class V-wing starfighter"
}
}
}