Mengonfigurasi skema
Mengonfigurasi skemaMenggunakan "field to input"

Menggunakan "field to input"

Peroleh nilai suatu field, manipulasi, dan masukkan ke field lain, semua dalam query yang sama.

Cara menggunakan

Field yang diambil nilainya direferensikan menggunakan sintaks "Variable" $, dan __ sebelum alias atau nama field. (Misalnya, nilai dari field excerpt direferensikan sebagai $__excerpt.) Respons dari field kedua dapat digunakan kembali sebagai input ke field lain:

{
  posts {
    excerpt
 
    # Referencing previous field with name "excerpt"
    isEmptyExcerpt: _isEmpty(value: $__excerpt)
 
    # Referencing previous field with alias "isEmptyExcerpt"
    isNotEmptyExcerpt: _not(value: $__isEmptyExcerpt)
  }
}

Responsnya akan berupa:

{
  "data": {
    "posts": [
      {
        "excerpt": "Some post excerpt",
        "isEmptyExcerpt": false,
        "isNotEmptyExcerpt": true
      },
      {
        "excerpt": "",
        "isEmptyExcerpt": true,
        "isNotEmptyExcerpt": false
      }
    ]
  }
}

Field hanya dapat direferensikan oleh field-field saudara sebelumnya dalam node yang sama. Query berikut TIDAK akan berfungsi:

# This will fail because the reference to the field must appear after the field, not before
{
  posts {
    isEmptyExcerpt: _isEmpty(value: $__excerpt)
    excerpt
  }
}
 
# This will fail because the reference must be done within the same node
{
  posts {
    excerpt
  }
  isEmptyExcerpt: _isEmpty(value: $__excerpt)
}

Field juga tidak dapat direferensikan dari argumen direktif (untuk itu, gunakan direktif @passOnwards):

# This will fail because the reference can be only used as input to a field, not to a directive
{
  posts {
    hasComments
    title @include(if: $__hasComments)
  }
}

Contoh

Jika excerpt sebuah post kosong, gunakan judul sebagai gantinya:

{
  posts {
    title
    originalExcerpt: excerpt
    isEmptyExcerpt: _isEmpty(value: $__originalExcerpt)
    excerpt: if(condition: $__isEmptyExcerpt, then: $__title, else: $__originalExcerpt)
  }
}

Ambil data dari endpoint REST eksternal, dan manipulasi datanya sesuai kebutuhan.

{
  externalData: _getJSON(url: "https://example.com/rest/some-external-endpoint")
  userName: _extract(object: $__externalData, path: "data.user.name")
  userLastName: _extract(object: $__externalData, path: "data.user.surname")
}

Ini akan menghasilkan:

{
  "data": {
    "externalData": {
      "data": {
        "user": {
          "id": 1,
          "name": "Leo",
          "surname": "Loso"
        }
      }
    },
    "userName": "Leo",
    "userLastName": "Loso"
  }
}

Dengan menggunakan direktif @remove pada externalData, kita juga dapat menghindari pencetakan data sumber endpoint eksternal dalam respons:

{
  externalData: _getJSON(url: "https://example.com/rest/some-external-endpoint") @remove
  userName: _extract(object: $__externalData, path: "data.user.name")
  userLastName: _extract(object: $__externalData, path: "data.user.surname")
}

Ini sekarang akan menghasilkan:

{
  "data": {
    "userName": "Leo",
    "userLastName": "Loso"
  }
}

Ambil post untuk setiap pengguna yang menyertakan email pengguna tersebut:

{
  users {
    email
    posts(filter: { search: $__email }) {
      id
      title
    }
  }
}

Kirim newsletter dengan mendefinisikan email to dan from melalui field optionValue:

mutation {
  fromEmail: optionValue(name: "admin_email")
  toEmail: optionValue(name: "subscribers_email_list_recipient_address")
  _sendEmail(
    from: {
      email: $__fromEmail
    }
    to: $__toEmail
    subject: "Weekly summary"
    messageAs: {
      html: "..."
    }
  )
}