Mit der GraphQL API interagieren
Mit der GraphQL API interagierenDen Pfad ändern, an dem ein Feld in der Antwort ausgegeben wird

Den Pfad ändern, an dem ein Feld in der Antwort ausgegeben wird

Diese Frage erschien auf 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?

Mit anderen Worten: Ist es möglich, dem GraphQL-Server zu sagen, er soll die Form der Antwort abflachen? Und wenn ja, wie macht man das?

Hier ist eine Lösung mit Gato GraphQL, die folgende Erweiterungen nutzt:

Mit @export können wir eine erste Query-Operation dazu bringen, ein Ergebnis in eine Variable zu exportieren, und dann eine zweite Query-Operation deklarieren, die diese Variable liest und sie an der erwarteten Stelle in der Antwort ausgibt:

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)
      }
    }
  }
}

...und die Ausführung der query (mit Übergabe von ?operationName=PrintRelocatedDate) liefert dann diese Antwort:

{
  "data": {
    "allMdx": {
      "edges": [
        {
          "frontmatter": {
            "publishedAt": "February 06, 2021"
          },
          "publishedAt": "February 06, 2021"
        }
      ]
    }
  }
}