Berinteraksi dengan API GraphQL
Berinteraksi dengan API GraphQLMengubah jalur tempat sebuah field dicetak dalam respons

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.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?

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:

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