使用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" } } }