การโต้ตอบกับ GraphQL APIการเปลี่ยนเส้นทางที่ฟิลด์ถูกพิมพ์ลงในการตอบกลับ
การเปลี่ยนเส้นทางที่ฟิลด์ถูกพิมพ์ลงในการตอบกลับ
คำถามนี้ ปรากฏบน Reddit:
I have:
allMdx { edges { node { frontmatter { date(formatString: "MMMM DD, YYYY") } } } }I need
frontmatter.dateto bepublishedAt:allMdx { edges { node { publishedAt: frontmatter{date(formatString: "MMMM DD, YYYY")} } } }Problem is, when I do this, I end up with:
{ "publishedAt": { "date": "February 06, 2021" } }Instead of (which is what I need):
{ "publishedAt": "February 06, 2021" }Is it even possible to alias nested fields like this?
กล่าวอีกนัยหนึ่ง เป็นไปได้หรือไม่ที่จะบอกให้เซิร์ฟเวอร์ GraphQL ทำให้รูปทรงของการตอบกลับแบนราบ? และถ้าเป็นไปได้ จะทำอย่างไร?
นี่คือวิธีแก้ปัญหาด้วย Gato GraphQL โดยใช้ประโยชน์จากส่วนขยายต่อไปนี้:
- Multiple Query Execution: เพื่อ
@exportค่าของตัวแปรข้ามการดำเนินการ GraphQL - PHP Functions via Schema: เพื่อพิมพ์ค่านี้อีกครั้งในตำแหน่งที่ต้องการผ่านฟิลด์
_echo
ด้วย @export เราสามารถให้การดำเนินการ queries แรก export ผลลัพธ์บางอย่างไปยังตัวแปร จากนั้นประกาศการดำเนินการ queries ที่สองซึ่งจะอ่านตัวแปรนี้และพิมพ์มันในตำแหน่งที่คาดหวังในการตอบกลับ:
query ExportDate
{
allMdx {
edges {
node {
frontmatter {
date(formatString: "MMMM DD, YYYY")
@export(as: "date")
}
}
}
}
}
query PrintRelocatedDate($date: String)
@depends(on: "ExportDate")
{
allMdx {
edges {
node {
publishedAt: _echo(value: $date)
}
}
}
}...และเมื่อดำเนิน queries (โดยส่ง ?operationName=PrintRelocatedDate) จะได้การตอบกลับดังนี้:
{
"data": {
"allMdx": {
"edges": [
{
"frontmatter": {
"publishedAt": "February 06, 2021"
},
"publishedAt": "February 06, 2021"
}
]
}
}
}