Truy vấn các trường 'self'
Đôi khi chúng ta cần thay đổi hình dạng của phản hồi, để mô phỏng phản hồi tương tự từ một máy chủ GraphQL khác, hoặc từ REST API.
Chúng ta có thể thực hiện điều này thông qua trường self, được thêm vào tất cả các kiểu trong schema GraphQL, trường này phản chiếu lại chính đối tượng mà nó được áp dụng:
type QueryRoot {
self: QueryRoot!
}
type Post {
self: Post!
}
type User {
self: User!
}Cách hoạt động
Trường self cho phép thêm các cấp độ phụ vào query mà không rời khỏi đối tượng đang được truy vấn. Khi chạy query này:
{
__typename
self {
__typename
}
post(by: {id: 1}) {
self {
id
__typename
}
}
user(by: {id: 1}) {
self {
id
__typename
}
}
}...sẽ tạo ra phản hồi này:
{
"data": {
"__typename": "QueryRoot",
"self": {
"__typename": "QueryRoot"
},
"post": {
"self": {
"id": 1,
"__typename": "Post"
}
},
"user": {
"self": {
"id": 1,
"__typename": "User"
}
}
}
}Cách sử dụng
Dùng self để giả tạo thêm các cấp độ phụ cần thiết cho phản hồi, và dùng bí danh trường để đặt tên lại cho các cấp độ đó một cách phù hợp.
Ví dụ, query này tái tạo hình dạng của một máy chủ GraphQL khác:
{
categories: self {
edges: postCategories {
node: self {
name
slug
}
}
}
}Query này tái tạo hình dạng của WP REST API:
{
post(by: {id: 1}) {
content: self {
rendered: content
}
}
}Thêm các trường self vào endpoint
Việc thêm các trường self vào schema có thể được cấu hình như sau, theo thứ tự ưu tiên:
✅ Chế độ cụ thể cho custom endpoint hoặc persisted query, được định nghĩa trong cấu hình schema

✅ Chế độ mặc định, được định nghĩa trong Cài đặt
Nếu cấu hình schema có giá trị "Default", nó sẽ sử dụng chế độ được định nghĩa trong Cài đặt:

Khi nào nên sử dụng
Trường self có thể được dùng để điều chỉnh hình dạng của phản hồi GraphQL cho phù hợp với một hình dạng cụ thể được yêu cầu, chẳng hạn như hình dạng từ một máy chủ GraphQL khác, hoặc từ REST API.