Truy vấn nội tâm với GraphQL
Với GraphQL, bạn có thể chạy các truy vấn nội quan để tìm hiểu về các trường và loại có sẵn của một schemas GraphQL. Khả năng xem xét nội tâm đó cũng là điều mang lại cho GraphiQL khả năng cung cấp tài liệu về schemas và tự động hoàn thành.
Hãy sử dụng điểm cuối API công khai SWAPI của Star Wars để chạy một số truy vấn xem xét kỹ .
__kiểu
Trước tiên, hãy chạy một truy vấn để hỏi về loại Phim bằng cách sử dụng __type được tích hợp sẵn :
query FilmType {
__type(name: "Film") {
kind
name
fields {
name
description
type {
name
}
}
}
}
- Loại cung cấp cho ta giá trị enum cho loại, như OBJECT, SCALAR hoặc INTERFACE.
- Tên cho ta tên của loại.
- Mô tả , tốt, cung cấp cho ta mô tả!
Và đây là phản hồi trông như thế nào:
{
"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"
}
},
...
Lưu ý việc sử dụng __type tích hợp sẵn (kiểu __Type) ở đây để lấy thông tin về loại của một đối tượng hoặc giao diện cụ thể.
Đây là một ví dụ khác sử dụng một phân đoạn để tìm hiểu thêm về một loại cụ thể:
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
}
}
}
}
__lược đồ
Với __schema, ta có thể hỏi server về chính schemas đó. Hãy xem một ví dụ:
query LearnAboutSchema {
__schema {
types {
name
kind
}
queryType {
fields {
name
description
}
}
}
}
Và phản hồi:
{
"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
},
...
__tên loại
__typename được dùng như một phần của các truy vấn thông thường để hỏi về loại của một trường cụ thể:
query LearnAboutFilm {
allFilms {
films {
__typename
title
}
}
film (id: "ZmlsbXM6Mw==") {
__typename
title
}
starship(id: "c3RhcnNoaXBzOjc1") {
__typename
name
model
}
}
Và đây là câu trả lời:
{
"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"
}
}
}
Các tin liên quan