使用GraphQL,您可以运行自检查询,以了解GraphQL模式的可用字段和类型。这种自省能力也是GraphiQL能够提供有关模式和自动完成的文档的原因。
让我们使用Star WarsSWAPI Public API端点对其运行几个自省查询。
__类型
首先,让我们运行一个查询,使用内置的__类型来查询电影类型:
1query FilmType {
2 __type(name: "Film") {
3 kind
4 name
5 fields {
6 name
7 description
8 type {
9 name
10 }
11 }
12 }
13}
- Kind 为我们提供类型的枚举值,如Object、标量或接口。
- 名称 为我们提供类型的名称。
- 描述 ,好吧,给了我们描述!
以下是人们的回应:
1{
2 "data": {
3 "__type": {
4 "kind": "OBJECT",
5 "name": "Film",
6 "fields": [
7 {
8 "name": "title",
9 "description": "The title of this film.",
10 "type": {
11 "name": "String"
12 }
13 },
14 {
15 "name": "episodeID",
16 "description": "The episode number of this film.",
17 "type": {
18 "name": "Int"
19 }
20 },
21 ...
注意,这里使用了内置的__type(类型为__Type)来获取有关特定对象或接口的类型的信息。
下面是使用片段了解特定类型的更多信息的另一个示例:
1query LearnAboutFilm {
2 __type(name: "Film") {
3 ...AboutType
4 }
5}
6
7fragment AboutType on __Type {
8 fields {
9 name
10 description
11 args {
12 name
13 description
14 }
15 }
16 interfaces {
17 name
18 description
19 }
20 inputFields {
21 name
22 description
23 }
24 possibleTypes {
25 kind
26 name
27 fields {
28 name
29 description
30 type {
31 kind
32 name
33 description
34 }
35 }
36 }
37}
__模式
使用__SCHEMA,我们可以向服务器询问有关架构本身的信息。让我们来看一个例子:
1query LearnAboutSchema {
2 __schema {
3 types {
4 name
5 kind
6 }
7 queryType {
8 fields {
9 name
10 description
11 }
12 }
13 }
14}
而他们的回应是:
1{
2 "data": {
3 "__schema": {
4 "types": [
5 {
6 "name": "Root",
7 "kind": "OBJECT"
8 },
9 {
10 "name": "String",
11 "kind": "SCALAR"
12 },
13 {
14 "name": "Int",
15 "kind": "SCALAR"
16 },
17 ...
18 "queryType": {
19 "fields": [
20 {
21 "name": "allFilms",
22 "description": null
23 },
24 {
25 "name": "film",
26 "description": null
27 },
28 ...
__类型
__typeName可以作为常规查询的一部分,用于查询特定字段的类型:
1query LearnAboutFilm {
2 allFilms {
3 films {
4 __typename
5 title
6 }
7 }
8 film (id: "ZmlsbXM6Mw==") {
9 __typename
10 title
11 }
12 starship(id: "c3RhcnNoaXBzOjc1") {
13 __typename
14 name
15 model
16 }
17}
以下是人们的回应:
1{
2 "data": {
3 "allFilms": {
4 "films": [
5 {
6 "__typename": "Film",
7 "title": "A New Hope"
8 },
9 {
10 "__typename": "Film",
11 "title": "The Empire Strikes Back"
12 },
13 ...
14 ]
15 },
16 "film": {
17 "__typename": "Film",
18 "title": "Return of the Jedi"
19 },
20 "starship": {
21 "__typename": "Starship",
22 "name": "V-wing",
23 "model": "Alpha-3 Nimbus-class V-wing starfighter"
24 }
25 }
26}