
Ö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:

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ı
versionConstraintaracı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>"
}
}
}