Menggunakan direktif multi-field
Direktif multi-field adalah direktif yang dapat diterapkan ke beberapa field sekaligus, bukan hanya satu. Ketika diaktifkan, argumen affectAdditionalFieldsUnderPos ditambahkan ke semua direktif, di mana posisi relatif dari field tambahan yang akan dikenai direktif dapat ditentukan.
Misalnya, dalam query berikut, direktif @strTranslate hanya diterapkan ke field content:
{
posts {
excerpt
content @strTranslate
}
}Field excerpt juga dapat dikenai direktif @strTranslate, dengan menambahkan argumen direktif affectAdditionalFieldsUnderPos bernilai [1] (karena 1 adalah posisi relatif field excerpt dari direktif @strTranslate):
{
posts {
excerpt
content
@strTranslate(
affectAdditionalFieldsUnderPos: [1]
)
}
}Jumlah field yang ditambahkan tidak dibatasi. Dalam query ini, dateStr juga sedang diterjemahkan:
{
posts {
dateStr
excerpt
content
@strTranslate(
affectAdditionalFieldsUnderPos: [1, 2]
)
}
}Field yang secara alami dikenai direktif (seperti content dalam semua query di atas) tidak perlu ditentukan dalam argumen.
Pada query di atas, posisi relatif dari direktif @strTranslate ke field-field sebelumnya adalah:
- Posisi
2:dateStr - Posisi
1:excerpt - Posisi
0:content<= Bersifat implisit, selalu diterapkan
Kasus penggunaan
Ada dua kasus penggunaan utama untuk fitur ini:
- Performa
- Fungsionalitas yang diperluas
Performa
Untuk direktif yang melakukan panggilan ke API eksternal, semakin sedikit jumlah permintaan yang dieksekusi, semakin cepat penyelesaiannya.
Itulah kasus dengan direktif @strTranslate, yang terhubung ke Google Translate API. Biasanya, untuk menerjemahkan field content dan excerpt dari daftar postingan, query-nya adalah seperti ini:
query {
posts {
excerpt @strTranslate
content @strTranslate
}
}Dengan menambahkan @strTranslate dua kali, query ini mengeksekusi dua permintaan ke Google Translate API (satu untuk menerjemahkan semua nilai excerpt, satu lagi untuk semua nilai content).
Berkat fitur Multi-Field Directives, query di bawah ini juga menerjemahkan semua nilai untuk field content dan excerpt, tetapi hanya mengeksekusi satu permintaan ke Google Translate API:
query {
posts {
excerpt
content
@strTranslate(
affectAdditionalFieldsUnderPos: [1]
)
}
}Fungsionalitas yang Diperluas
Direktif yang menerima field tambahan dapat memberikan kalkulasi tambahan.
Misalnya, direktif @export biasanya mengekspor nilai dari satu field, seperti nama pengguna yang sedang login:
query GetLoggedInUserName {
me {
name @export(as: "userName")
}
}Melalui argumen affectAdditionalFieldsUnderPos, @export dapat menerima beberapa field, dan kemudian akan mengekspor sebuah kamus yang berisi field-field tersebut sebagai entri:
query GetLoggedInUserNameAndSurname {
me {
name
surname
@export(
as: "userProps"
affectAdditionalFieldsUnderPos: [1]
)
}
}@export sekarang akan menghasilkan nilai berikut pada variabel $userProps
{
"name": "Leo",
"surname": "Loso"
}Konfigurasi
Untuk mengaktifkan atau menonaktifkan direktif multi-field dalam skema GraphQL, buka modul "Multi-Field Directives" pada halaman Settings, dan centang/hapus centang pada kotak Enable multi-field directives?:

Untuk mengaktifkan atau menonaktifkan direktif multi-field pada endpoint tertentu, pilih opsi yang diinginkan di blok "Multi-Field Directives" dari Schema Configuration yang sesuai:
