Logo

Özellik:

Şema için Özel Özellikler

Şema için Özel Özellikler

GraphQL spesifikasyonu için önerilen pek çok özellik Gato GraphQL'de zaten uygulanmış durumda, bu yüzden beklememize gerek yok.

Şema ad alanlandırma

WooCommerce ve Easy Digital Downloads eklentilerinin ikisi de GraphQL API için bir Product türü uygulasaydı, türleri çakışacağından her iki eklentiyi aynı anda yükleyemezdik.

Şema ad alanlandırma, tüm tür adlarının bir ad alanıyla tanımlanmasını sağlayarak şemadaki çakışmaları önler. Böylece Product türü sırasıyla Woo_Product ve EDD_Product olur ve bu türler aynı şemaya eklenebilir.

Bu görsel, ad çakışmalarını önlemek için Event ve Location türlerine EM_ önekinin eklendiği ad alanlandırılmış bir şemayı göstermektedir:

Ad alanlandırılmış şema

Evrensel alanlar

Evrensel alanlar, GraphQL şemasındaki her türün altında erişilebilen (yalnızca bir kez tanımlanmalarına karşın) alanlardır.

GraphQL şeması Post, User ve Comment gibi türleri ve her tür için kullanılabilir alanları (Post.title, User.name ve Comment.responses gibi) ortaya koyar. Bu alanlar bir varlıktan belirli bir veri parçasını aldıklarından "veri" ile ilgilenir.

Gato GraphQL ise bunlara ek olarak farklı türde alanlar da sunar: veri yerine "işlevsellik" sağlayanlar.

Bazı evrensel alan örnekleri şunlardır:

  • _not
  • _if
  • _equals
  • _isEmpty
  • _echo
  • _sprintf
  • _arrayItem
  • _arrayAddItem
  • _arrayUnique
  • ve daha fazlası

İşlevsellik alanları, WordPress dışında depolanan verileri elde etmek ve alınan verileri işlemek için kullanışlıdır; bir alan değerini istenen biçimde dönüştürmemize ve güçlü veri içe/dışa aktarma yetenekleri kazanmamıza olanak tanır.

İşlevsellik alanları Post veya User gibi belirli bir türe değil, şemadaki tüm türlere ait olur. Bu nedenle Gato GraphQL'de "evrensel alanlar" adıyla ayrı bir şekilde ele alınır.

Field to input

Bir alanın değerini alın, işleyin ve aynı query içinde başka bir alana girdi olarak verin.

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

Birleştirilebilir direktifler

Çoğu zaman bir direktif, alanın çıktısından farklı bir girdiye sahip olduğundan bir alana uygulanamaz. Örneğin @strUpperCase direktifi girdi olarak bir dize alır; bu yüzden dize dizisi döndüren User.capabilities alanına uygulanamaz.

Birleştirilebilir direktifler ile bir direktif, başka bir direktifi davranışını değiştirmek ya da eksikliği gidermek amacıyla güçlendirebilir. Bu, yalnızca girdi veya dönüş türlerini değiştirmek için alanları ya da direktifleri kopyalama gereksinimini ortadan kaldırarak gereksiz şişkinliği önler.

Bu query'de @underEachArrayItem direktifi bir dize dizisi üzerinde yineleme yapar ve iç içe geçmiş @strUpperCase direktifini her birine uygulayarak tür uyumsuzluğunu giderir:

query {
  users {
    capabilities
      @underEachArrayItem
        @strUpperCase
  }
}

Çok alanlı direktifler

Performans ve genişletilmiş kullanım senaryoları için direktiflerin birden fazla alana (yalnızca biri yerine) uygulanmasını sağlayın.

Etkinleştirildiğinde, direktifin uygulanacağı ek alanların göreli konumlarını belirtmek için tüm direktiflere affectAdditionalFieldsUnderPos argümanı eklenir.

Örneğin, aşağıdaki query'de @strTranslate direktifi yalnızca content alanına uygulanır:

query {
  posts {
    excerpt
    content @strTranslate
  }
}

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

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

Alan ve direktif tabanlı sürümleme

Alanları ve direktifleri şemadan bağımsız olarak sürümlendirin.

Tüm şemayı geliştirmek yerine (bu, değiştirilen alan veya direktifin adını değiştirmeyi gerektirir) şunları yapabiliriz:

  • Farklı uygulamaları aynı alan veya direktif adı altında tutmak
  • Eski uygulamayı semantik sürümleme kullanarak bir etiket altında sunmak
  • Alan/direktif argümanı versionConstraint aracılığıyla belirli bir sürüme erişmek

Proaktif geri bildirim

Query'ye verilen yanıtta kullanımdan kaldırmalar ve uyarılara ilişkin verileri göndermek için üst düzey extensions girdisini kullanın.

  • Kullanımdan kaldırmalar: Kullanımdan kaldırmalar yalnızca iç gözlem sırasında değil, kullanımdan kaldırılmış alanları içeren aynı query'de de döndürülür.
  • Uyarılar: Uyarılar, engelleyici olmayan sorunlar olarak değerlendirilebilir; yani query'yi iyileştirir ancak bozmaz.

Örneğin, aşağıdaki query aynı "prop" dinamik değişken adını kullanarak iki alan dışa aktarır ve bu bir uyarı oluşturur:

query {
  posts {
    excerpt @export(as: "prop")
    content @export(as: "prop")
  }
}

Yanıt, ilgili mesajı içeren warnings bölümünü (extensions altında) içerecektir:

{
  "extensions": {
    "warnings": [
      {
        "message": "Dynamic variable with name 'props' had already been set, had its value overridden",
        "locations": [
          {
            "line": 4,
            "column": 25
          }
        ]
      }
    ]
  },
  "data": {
    "posts": {
      "excerpt": "Hello world!",
      "Content": "<p>Hello world!</p>"
    }
  }
}

Bültenimize abone olun

Gato GraphQL'deki tüm güncellemelerden haberdar olun.