Modifier le chemin où un champ est affiché dans la réponse
Cette question est apparue sur 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 d'autres termes, est-il possible de demander au serveur GraphQL d'aplatir la forme de la réponse ? Et si oui, comment procéder ?
Voici une solution avec Gato GraphQL, utilisant les extensions suivantes :
- Exécution de requêtes multiples, pour
@exportla valeur d'une variable entre les opérations GraphQL - PHP Functions via Schema, pour afficher à nouveau cette valeur à l'emplacement souhaité via le champ
_echo
Avec @export, nous pouvons faire en sorte qu'une première opération de requête exporte un résultat vers une variable, puis déclarer une deuxième opération de requête qui lira cette variable et l'affichera à l'emplacement attendu dans la réponse :
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)
}
}
}
}...puis en exécutant la requête (en passant ?operationName=PrintRelocatedDate), cela produira cette réponse :
{
"data": {
"allMdx": {
"edges": [
{
"frontmatter": {
"publishedAt": "February 06, 2021"
},
"publishedAt": "February 06, 2021"
}
]
}
}
}