Şemayı yapılandırma
Şemayı yapılandırmaÇok Alanlı Direktiflerin Kullanımı

Çok Alanlı Direktiflerin Kullanımı

Çok alanlı direktif, yalnızca bir alan yerine birden fazla alana uygulanabilen bir direktiftir. Etkinleştirildiğinde, tüm direktiflere affectAdditionalFieldsUnderPos adlı bir argüman eklenir; bu argüman aracılığıyla direktifin uygulanacağı ek alanların göreli konumları belirtilebilir.

Örneğin, aşağıdaki queries içinde @strTranslate direktifi yalnızca content alanına uygulanmaktadır:

{
  posts {
    excerpt
    content @strTranslate
  }
}

excerpt alanına da @strTranslate direktifi uygulanabilir; bunun için affectAdditionalFieldsUnderPos direktif argümanına [1] değeri eklenir (1, @strTranslate direktifinden excerpt alanının göreli konumudur):

{
  posts {
    excerpt
    content
      @strTranslate(
        affectAdditionalFieldsUnderPos: [1]
      )
  }
}

Eklenebilecek alan sayısı sınırlı değildir. Bu queries içinde dateStr de çevrilmektedir:

{
  posts {
    dateStr
    excerpt
    content
      @strTranslate(
        affectAdditionalFieldsUnderPos: [1, 2]
      )
  }
}

Direktifin doğal olarak uygulandığı alan (yukarıdaki tüm queries içinde content gibi) argümanda belirtilmemelidir.

Yukarıdaki queries içinde @strTranslate direktifinden önceki alanlara olan göreli konumlar şunlardır:

  • Konum 2: dateStr
  • Konum 1: excerpt
  • Konum 0: content <= Örtük, her zaman uygulanır

Kullanım Senaryoları

Bu özellik için iki temel kullanım senaryosu vardır:

  1. Performans
  2. Genişletilmiş işlevsellik

Performans

Harici API'lere çağrı yapan direktiflerde, daha az istek yapıldıkça çözümleme daha hızlı gerçekleşir.

Bu durum, Google Translate API'sine bağlanan @strTranslate direktifi için geçerlidir. Normalde, bir gönderi listesinden content ve excerpt alanlarını çevirmek için queries şu şekilde olurdu:

query {
  posts {
    excerpt @strTranslate
    content @strTranslate
  }
}

@strTranslate iki kez eklenerek bu queries, Google Translate API'sine iki istek yapar (biri excerpt için tüm değerleri çevirmek, diğeri content için tüm değerleri çevirmek amacıyla).

Multi-Field Directives özelliği sayesinde, aşağıdaki queries de hem content hem de excerpt alanlarının tüm değerlerini çevirir; ancak bunun yerine Google Translate API'sine yalnızca tek bir istek gönderir:

query {
  posts {
    excerpt
    content
      @strTranslate(
        affectAdditionalFieldsUnderPos: [1]
      )
  }
}

Genişletilmiş İşlevsellik

Ek alanlar alan direktifler, ek hesaplamalar sağlayabilir.

Örneğin, @export direktifi normalde oturum açmış kullanıcının adı gibi tek bir alanın değerini dışa aktarır:

query GetLoggedInUserName {
  me {
    name @export(as: "userName")
  }
}

affectAdditionalFieldsUnderPos argümanı aracılığıyla @export, birden fazla alan alabilir ve bu alanları girdi olarak içeren bir sözlük dışa aktarır:

query GetLoggedInUserNameAndSurname {
  me {
    name
    surname
      @export(
        as: "userProps"
        affectAdditionalFieldsUnderPos: [1]
      )
  }
}

@export artık $userProps değişkeninde şu değeri üretecektir:

{
  "name": "Leo",
  "surname": "Loso"
}

Yapılandırma

GraphQL şemasında çok alanlı direktifleri etkinleştirmek veya devre dışı bırakmak için Ayarlar sayfasındaki "Multi-Field Directives" modülüne gidin ve Enable multi-field directives? onay kutusunu işaretleyin ya da işaretini kaldırın:

Multi-Field Directives için Ayarlar
Multi-Field Directives için Ayarlar

Belirli bir uç noktada çok alanlı direktifleri etkinleştirmek veya devre dışı bırakmak için ilgili Schema Configuration içindeki "Multi-Field Directives" bloğundan istenen seçeneği belirleyin:

Schema Configuration içinde Multi-Field Directives
Schema Configuration içinde Multi-Field Directives