Şemayı yapılandırma
Şemayı yapılandırmaBirleştirilebilir direktifleri kullanma

Birleştirilebilir direktifleri kullanma

Bir direktifin başka bir direktifin davranışını değiştirmesini sağlayın.

Bu işlevsellik, bir direktifi kullanmanın aksi takdirde mümkün olmadığı durumlarda kullanmayı sağlar; tür uyumsuzluğu nedeniyle (yani bir direktif, alanın çıktısından farklı bir girdi aldığı için alana uygulanamadığında).

Örneğin, capabilities alanı [String] (bir dize dizisi) döndürür ve @strUpperCase direktifi String alır. Bu nedenle, aşağıdaki query çalıştırıldığında tür uyumsuzluğu nedeniyle bir hata döner:

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

Birleştirilebilir direktiflerle, @strUpperCase çalıştırılmadan önce zemin hazırlamak amacıyla @underEachArrayItem direktifini (bir öğe dizisi üzerinde yineleyerek iç içe direktifini her birine uygulayan) kullanabilir ve ona tek bir öğe (String türünde) almasını sağlayabiliriz.

Yukarıdaki query şu şekilde karşılanabilir:

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

Meta direktifler

Her meta direktif, aynı anda birden fazla direktifi etkileyebilir (veya "iç içe geçirebilir"). Hangi direktiflerin etkilendiği, pozitif tam sayılardan oluşan bir dizi alan affectDirectivesUnderPos argümanı aracılığıyla belirtilir; her bir sayı, etkilenen direktifin göreli konumunu tanımlar.

Varsayılan olarak, affectDirectivesUnderPos argümanının varsayılan değeri [1]'dir; bu, hemen yanındaki direktifi etkileyeceği anlamına gelir.

Aşağıdaki örnekte:

  • @underEachArrayItem meta direktiftir
  • @strTranslate, @underEachArrayItem altında iç içe geçmiştir (örtük varsayılan değer affectDirectivesUnderPos: [1])
{
  someField
    @underEachArrayItem
      @strTranslate
}

Aşağıdaki örnekte ise:

  • @strTranslate ve @strUpperCase, @underEachArrayItem altında iç içe geçmiştir (affectDirectivesUnderPos argümanındaki [1, 2] göreli konumlarıyla belirtildiği gibi)
{
  someField
    @underEachArrayItem(affectDirectivesUnderPos: [1, 2])
      @strTranslate
      @strUpperCase
}

Meta direktifler, meta direktifler içinde de iç içe geçirilebilir.

Aşağıdaki örnekte:

  • @underEachArrayItem en üst meta direktiftir
  • @underJSONObjectProperty, @underEachArrayItem altında iç içe geçmiştir
  • @strUpperCase, @underJSONObjectProperty altında iç içe geçmiştir
query UppercaseEntriesInsideObject {
  entries: _echo(value: [
    {
      text: "Hello my friends"
    },
    {
      text: "How do you like this software so far?"
    }
  ])
   @underEachArrayItem
      @underJSONObjectProperty(by: { key: "text" })
        @strUpperCase
  }

Yapılandırma

GraphQL şemasında birleştirilebilir direktifleri etkinleştirmek veya devre dışı bırakmak için Ayarlar sayfasındaki "Composable Directives" modülüne gidin ve Enable composable directives? onay kutusunu işaretleyin/kaldırın:

Composable Directives için Ayarlar
Composable Directives için Ayarlar

Belirli bir uç noktada birleştirilebilir direktifleri etkinleştirmek veya devre dışı bırakmak için, ilgili Schema Configuration'daki "Composable Directives" bloğundan istediğiniz seçeneği seçin:

Schema Configuration'da Composable Directives
Schema Configuration'da Composable Directives