Interactuar con la API GraphQL
Interactuar con la API GraphQLCambiar la ruta donde se imprime un campo en la respuesta

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.date to be publishedAt:

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:

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"
        }
      ]
    }
  }
}