การ queries ฟิลด์ 'self'
บางครั้งเราจำเป็นต้องปรับเปลี่ยนรูปแบบของการตอบสนอง เพื่อจำลองการตอบสนองเดียวกันจาก GraphQL server อื่น หรือจาก REST API
เราสามารถทำได้ผ่านฟิลด์ self ที่ถูกเพิ่มเข้าไปในทุกประเภทในสคีมา GraphQL ซึ่งจะส่งคืนอ็อบเจ็กต์เดิมที่ถูกนำไปใช้:
type QueryRoot {
self: QueryRoot!
}
type Post {
self: Post!
}
type User {
self: User!
}วิธีการทำงาน
ฟิลด์ self ช่วยให้สามารถเพิ่มระดับพิเศษให้กับ query โดยไม่ต้องออกจากอ็อบเจ็กต์ที่กำลัง queries อยู่ การรัน query นี้:
{
__typename
self {
__typename
}
post(by: {id: 1}) {
self {
id
__typename
}
}
user(by: {id: 1}) {
self {
id
__typename
}
}
}...จะได้รับการตอบสนองดังนี้:
{
"data": {
"__typename": "QueryRoot",
"self": {
"__typename": "QueryRoot"
},
"post": {
"self": {
"id": 1,
"__typename": "Post"
}
},
"user": {
"self": {
"id": 1,
"__typename": "User"
}
}
}
}วิธีการใช้งาน
ใช้ self เพื่อเพิ่มระดับพิเศษที่จำเป็นสำหรับการตอบสนองโดยเทียม และใช้ field aliases เพื่อตั้งชื่อระดับเหล่านั้นให้เหมาะสม
ตัวอย่างเช่น query นี้สร้างรูปแบบของ GraphQL server อื่นขึ้นมาใหม่:
{
categories: self {
edges: postCategories {
node: self {
name
slug
}
}
}
}query นี้สร้างรูปแบบของ WP REST API ขึ้นมาใหม่:
{
post(by: {id: 1}) {
content: self {
rendered: content
}
}
}การเพิ่มฟิลด์ self ไปยัง endpoints
การเพิ่มฟิลด์ self ไปยังสคีมาสามารถกำหนดค่าได้ดังนี้ เรียงตามลำดับความสำคัญ:
✅ โหมดเฉพาะสำหรับ custom endpoint หรือ persisted query ที่กำหนดไว้ในการกำหนดค่าสคีมา

✅ โหมดเริ่มต้น ที่กำหนดไว้ในการตั้งค่า
หากการกำหนดค่าสคีมามีค่าเป็น "Default" ระบบจะใช้โหมดที่กำหนดไว้ในการตั้งค่า:

เมื่อใดควรใช้
ฟิลด์ self สามารถใช้เพื่อปรับรูปแบบของการตอบสนอง GraphQL ให้เข้ากับรูปแบบเฉพาะที่ต้องการ เช่น รูปแบบจาก GraphQL server อื่น หรือจาก REST API