Cambiar la ruta donde se imprime un campo en la respuesta
Esta pregunta apareció en 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?
En otras palabras, ¿es posible decirle al servidor GraphQL que aplane la forma de la respuesta? Y, si es así, ¿cómo hacerlo?
Aquí tienes una solución con Gato GraphQL, haciendo uso de las siguientes extensiones:
- Ejecución de múltiples consultas, para
@exportel valor de una variable entre operaciones GraphQL - PHP Functions via Schema, para imprimir este valor de nuevo en la ubicación deseada mediante el campo
_echo
Con @export, podemos hacer que una primera operación de consulta exporte algún resultado a una variable, y luego declarar una segunda operación de consulta que leerá esta variable y la imprimirá en la ubicación esperada en la respuesta:
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)
}
}
}
}...y entonces ejecutando la consulta (pasando ?operationName=PrintRelocatedDate) producirá esta respuesta:
{
"data": {
"allMdx": {
"edges": [
{
"frontmatter": {
"publishedAt": "February 06, 2021"
},
"publishedAt": "February 06, 2021"
}
]
}
}
}