Mengubah jalur tempat sebuah field dicetak dalam respons
Pertanyaan ini muncul di 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?
Dengan kata lain, apakah mungkin untuk memberitahu server GraphQL agar meratakan bentuk respons? Dan jika ya, bagaimana caranya?
Berikut adalah solusi dengan Gato GraphQL, memanfaatkan ekstensi-ekstensi berikut:
- Multiple Query Execution, untuk
@exportnilai sebuah variabel lintas operasi GraphQL - PHP Functions via Schema, untuk mencetak nilai tersebut kembali di lokasi yang diinginkan melalui field
_echo
Dengan @export, kita dapat membuat operasi query pertama mengekspor suatu hasil ke sebuah variabel, lalu mendeklarasikan operasi query kedua yang akan membaca variabel tersebut dan mencetaknya di lokasi yang diharapkan dalam respons:
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)
}
}
}
}...dan kemudian mengeksekusi query (dengan meneruskan ?operationName=PrintRelocatedDate) akan menghasilkan respons berikut:
{
"data": {
"allMdx": {
"edges": [
{
"frontmatter": {
"publishedAt": "February 06, 2021"
},
"publishedAt": "February 06, 2021"
}
]
}
}
}