Mengonfigurasi skema
Mengonfigurasi skemaMenggunakan direktif komposabel

Menggunakan direktif komposabel

Buat sebuah direktif memodifikasi perilaku direktif lain.

Fungsionalitas ini memungkinkan penggunaan sebuah direktif, ketika sebaliknya kita tidak bisa menggunakannya karena ketidaksesuaian tipe (yaitu, ketika sebuah direktif tidak dapat diterapkan pada field, karena ia memiliki input yang berbeda dari output field tersebut).

Misalnya, field capabilities mengembalikan [String] (sebuah array of strings), dan direktif @strUpperCase menerima String. Oleh karena itu, menjalankan query berikut mengembalikan error karena ketidaksesuaian tipe:

query {
  user(by: {id: 1}) {
    capabilities @strUpperCase
  }
}

Dengan direktif komposabel, kita dapat menggunakan direktif @underEachArrayItem (yang mengiterasi array elemen, dan menerapkan direktif bersarangnya pada setiap elemen) untuk mempersiapkan kondisi sebelum @strUpperCase dieksekusi, membuatnya menerima satu elemen (bertipe String).

Query di atas dapat dipenuhi seperti ini:

query {
  user(by: {id: 1}) {
    capabilities
      @underEachArrayItem
        @strUpperCase
  }
}

Meta direktif

Setiap meta direktif dapat memengaruhi (atau "menyarangkan") beberapa direktif sekaligus. Direktif mana yang terpengaruh ditunjukkan melalui argumen affectDirectivesUnderPos, yang menerima array bilangan bulat positif, masing-masing mendefinisikan posisi relatif direktif yang terpengaruh.

Secara default, argumen affectDirectivesUnderPos memiliki nilai default [1], yang berarti ia akan memengaruhi direktif tepat di sebelahnya.

Pada contoh di bawah, kita memiliki:

  • @underEachArrayItem adalah meta direktif
  • @strTranslate bersarang di bawah @underEachArrayItem (nilai default implisit affectDirectivesUnderPos: [1])
{
  someField
    @underEachArrayItem
      @strTranslate
}

Pada contoh di bawah, kita sebaliknya memiliki:

  • @strTranslate dan @strUpperCase bersarang di bawah @underEachArrayItem (sebagaimana ditunjukkan oleh posisi relatif [1, 2] dalam argumen affectDirectivesUnderPos)
{
  someField
    @underEachArrayItem(affectDirectivesUnderPos: [1, 2])
      @strTranslate
      @strUpperCase
}

Meta direktif juga dapat disarangkan dalam meta direktif.

Pada contoh di bawah, kita memiliki:

  • @underEachArrayItem adalah meta direktif paling luar
  • @underJSONObjectProperty bersarang di bawah @underEachArrayItem
  • @strUpperCase bersarang di bawah @underJSONObjectProperty
query UppercaseEntriesInsideObject {
  entries: _echo(value: [
    {
      text: "Hello my friends"
    },
    {
      text: "How do you like this software so far?"
    }
  ])
   @underEachArrayItem
      @underJSONObjectProperty(by: { key: "text" })
        @strUpperCase
  }

Konfigurasi

Untuk mengaktifkan atau menonaktifkan direktif komposabel dalam skema GraphQL, pergi ke modul "Composable Directives" pada halaman Settings, dan centang/hapus centang kotak Enable composable directives?:

Pengaturan untuk Composable Directives
Pengaturan untuk Composable Directives

Untuk mengaktifkan atau menonaktifkan direktif komposabel pada endpoint tertentu, pilih opsi yang diinginkan di blok "Composable Directives" dari Schema Configuration yang sesuai:

Composable Directives dalam Schema Configuration
Composable Directives dalam Schema Configuration