🚀 Gato GraphQL'in yeni 0.8 sürümü yayınlandı!
Gato GraphQL'in 0.8 sürümü artık indirilebilir! 🎉
Bu, üç alana odaklanan büyük bir sürümdür:
- Eklentileri etkinleştirmek için kod tabanının yeniden düzenlenmesi
- GraphQL spesifikasyonuna daha fazla uyum sağlanması
- GraphQL şemasının tamamlanması
Ayrıca yeni WordPress 5.8'i desteklemekte ve pek çok hata düzeltmesi ile iyileştirme içermektedir.
Bu sürümün kırıcı değişiklikler içerdiğini lütfen unutmayın!
Aşağıda sürüm notları yer almaktadır. Hızlı bağlantılar:
- WordPress 5.8 desteği
- PHP 8.0 için geliştirilmiş destek
- Kod tabanı basitleştirildi, her yerde container services kullanıldı
- Önbellek
wp-contentaltına kaydediliyor - WordPress editörüne güç vermek için "sabit şema" GraphQL endpoint'i tanıtıldı
- Şemada alan türleri için daha fazla destek
- Input coercion: liste beklenirken tek bir değer kabul etme
- WordPress şeması daha da tamamlandı
- GraphQL şemasına "unrestricted" yönetici alanları eklendi
AnyScalarskaler türü tanıtıldı- Settings uzun biçimde
- Kırıcı değişiklikler
- Gelecek Roadmap
- Sorunla mı karşılaştınız?
WordPress 5.8 desteği
WordPress 5.8, allowed_block_types ve block_categories (bu eklenti tarafından kullanılan) dahil olmak üzere çeşitli filter hook'larını kullanımdan kaldırmıştır.
Etkilenen hook'lar değiştirilmiştir:
allowed_block_types=>allowed_block_types_allblock_categories=>block_categories_all
PHP 8.0 için geliştirilmiş destek
Bu sürüm, PHP 8.0 kullanılırken ortaya çıkan birkaç sorunu düzeltmektedir.
Kod tabanı basitleştirildi, her yerde container services kullanıldı
GraphQL sunucusunun kod tabanı, şema için tüm öğeleri (type resolver'lar, field resolver'lar, interface resolver'lar, custom scalar resolver'lar ve diğerleri) kaydetmek amacıyla bir service container kullanacak şekilde yeniden düzenlenmiştir.
Bu, eklentinin ve eklentilerinin geliştirilmesi için tek bir yaklaşım sunan ve kodlarını ile belgelerini büyük ölçüde basitleştiren bir dönüm noktasıdır.
Gato GraphQL için özel eklentilerin nasıl oluşturulacağına dair belgeler nihayet yazılabilir. Çalışmalar yakında başlayacak ve kılavuzlar bölümünde yayınlanacaktır.
Önbellek wp-content altına kaydediliyor
Eklenti, performansı optimize etmek için sonuçları diske önbelleğe alır.
Önbelleğe alınan dosyalar daha önce yönetici kullanıcının erişemediği bir sistem klasöründe saklanıyordu. Artık wp-content/graphql-api/cache/ altında saklanmaktadır.
WordPress editörüne güç vermek için "sabit şema" GraphQL endpoint'i tanıtıldı
Artık wp-admin içinde 2 endpoint bulunmaktadır:
GRAPHQL_API_ADMIN_CONFIGURABLESCHEMA_ENDPOINTGRAPHQL_API_ADMIN_FIXEDSCHEMA_ENDPOINT
GRAPHQL_API_ADMIN_CONFIGURABLESCHEMA_ENDPOINT ile GraphQL şeması; namespace kullanılıp kullanılmaması, türlerin/direktiflerin etkin olup olmaması gibi kullanıcı tercihlerine göre değiştirilmektedir.
GRAPHQL_API_ADMIN_FIXEDSCHEMA_ENDPOINT ile GraphQL şeması kullanıcı tercihlerinden etkilenmez; "unrestricted" yönetici alanları dahil tüm türleri, alanları ve direktifleri her zaman ortaya koyar.
Sabit endpoint, Gutenberg bloklarının kullanıcı tarafından etkin olup olmadığından bağımsız olarak tüm alanlara ve kısıtlamasız erişimle sorgulama yapmasına olanak tanır.
Şemada alan türleri için daha fazla destek
Alan türleri olarak listelerin desteği genişletilmiş, artık aşağıdaki özellikler desteklenmektedir:
- Null olmayan öğeler içeren listeler:
[String!] - Listeler içeren listeler:
[[String]] - Bunların herhangi bir kombinasyonu:
[[String!]!]
Input coercion: liste beklenirken tek bir değer kabul etme
Artık GraphQL spesifikasyonunda tanımlandığı gibi, liste beklenen yerlerde GraphQL queries'inde tek bir değer girebiliriz.
Örneğin, bu queries artık eşdeğerdir:
query InputSingleValue {
posts(filter: { ids: 1 }) {
title
}
}
query InputListOfSingleItem {
posts(filter: { ids: [1] }) {
title
}
}WordPress şeması daha da tamamlandı
WordPress veri modelinden ek varlıklar GraphQL şemasına eklenmiştir:

Hangi yeni öğelerin eklendiğine bakalım.
Kategoriler
Kategoriler, yeni PostCategory türü ve yeni alanlar aracılığıyla eşleştirilmiştir:
Root.postCategories: [PostCategory]Root.postCategory: PostCategoryPost.categories: [PostCategory]
Örneğin, bu query gönderilerin kategorilerini getirir:
{
posts {
id
title
categories {
id
name
url
}
}
}Gönderilere kategori atamak için bir mutation alanı da eklenmiştir:
MutationRoot.setCategoriesOnPost: Post
Gönderiler için mutation alanlarına bir categories input'u da eklenmiştir:
MutationRoot.createPostMutationRoot.updatePostPost.update(nested mutations etkin olduğunda)
Meta
Custom post, kullanıcı, yorum ve taksonomi meta değerleri artık yeni alanlar aracılığıyla sorgulanabilir:
Post.metaValue: AnyScalarPost.metaValues: [AnyScalar]User.metaValue: AnyScalarUser.metaValues: [AnyScalar]Comment.metaValue: AnyScalarComment.metaValues: [AnyScalar]PostCategory.metaValue: AnyScalarPostCategory.metaValues: [AnyScalar]PostTag.metaValue: AnyScalarPostTag.metaValues: [AnyScalar]
Örneğin, bu query kullanıcılar için last_name meta değerini getirir:
{
users {
id
lastName: metaValue(key: "last_name")
}
}Meta değerleri herhangi bir şey olabileceğinden (string, integer, float veya boolean) yeni tanıtılan genel skaler türü AnyScalar aracılığıyla eşleştirilmiştir.
Meta değerleri genel veya özel olabilir. Hangi meta key'lerinin sorgulanabileceği ayarlar sayfasında açıkça yapılandırılmalıdır:

Varsayılan olarak, izin verilen meta key'leri listesi boştur.
Menus
Menüler, yeni Menu türü ve yeni Root.menu alanı aracılığıyla eşleştirilmiştir.
{
menu(by: { id: 176 }) {
itemDataEntries
}
}Settings
Sitedeki ayarlar (wp_options tablosunda saklanır) yeni Root.option: AnyScalar alanı aracılığıyla sorgulanabilir.
Örneğin, bu query sitenin adını getirir:
{
siteName: optionValue(name: "blogname")
}Hangi seçeneklere erişilebileceği ayarlar sayfasında açıkça yapılandırılmalıdır:

Varsayılan olarak, yalnızca aşağıdaki seçenekler sorgulanabilir:
"home""blogname""blogdescription"
User posts
Oturum açmış kullanıcılar, yeni alanlar aracılığıyla herhangi bir durum (publish, pending, draft veya trash) için kendi gönderilerini getirebilir:
Root.myPosts: [Post]Root.myPostCount: IntRoot.myPost: Post
Örneğin, artık bu queries'i çalıştırabiliriz:
# Log yourself in first
mutation LogIn {
loginUser(usernameOrEmail: "test", password: "pass") {
id
name
}
}
# Then retrieve your posts
query GetMyPosts {
myPosts {
id
title
url
status
author {
name
}
}
}GraphQL şemasına "unrestricted" yönetici alanları eklendi
GraphQL şeması, genel bir API'de özel bilgilerin açığa çıkmasını önlemek için genel ve özel alanlar arasında denge kurmalıdır.
Yeni Schema for the Admin modülü, özel verileri açığa çıkarabilecek "unrestricted" yönetici alanlarını GraphQL şemasına ekler:
Root:
unrestrictedPostunrestrictedPostsunrestrictedPostCountunrestrictedCustomPostunrestrictedCustomPostsunrestrictedCustomPostCountunrestrictedGenericCustomPostunrestrictedGenericCustomPostsunrestrictedGenericCustomPostCountunrestrictedPageunrestrictedPagesunrestrictedPageCountunrestrictedUsersrolescapabilities
User:
unrestrictedPostsunrestrictedPostCountunrestrictedCustomPostsunrestrictedCustomPostCountrolescapabilities
PostCategory:
unrestrictedPostsunrestrictedPostCount
PostTag:
unrestrictedPostsunrestrictedPostCount
Örneğin, gönderi verilerine erişmek için şu anda yalnızca yayımlanmış gönderileri getirerek genel verileri ortaya koyan posts alanına sahibiz.
Artık gönderi verilerine unrestrictedPosts alanı aracılığıyla da erişebiliriz; bu alan, herhangi bir durumdaki ("publish", "draft", "pending", "trash") gönderileri getirerek hem genel hem de özel verileri ortaya koyar.
{
unrestrictedPosts(status: [draft, pending]) {
id
title
status
author {
id
name
}
}
}AnyScalar skaler türü tanıtıldı
AnyScalar skaler türü, yerleşik skalerlerden herhangi birini (String, Int, Boolean, Float veya ID) temsil eder.
Döndürülen verilerinin türünü önceden bilmediğimiz ve skaler türlerinin birleşiminin GraphQL spesifikasyonu tarafından henüz desteklenmediği için yeni tanıtılan option ve metaValue(s) alanlarında kullanılmaktadır.
Settings uzun biçimde
Settings sayfasındaki seçenekler sekmelere bölünmüştür. v0.8 sürümünden itibaren hepsini tek bir uzun sayfada birlikte görüntülemek de mümkündür.
Bu davranışı etkinleştirmek için Settings'de "Have all options in this Settings page be organized under tabs, one tab per module." öğesinin işaretini kaldırın ve "Save Changes" düğmesine basın:

Ardından, tüm ayarlar uzun biçimde birlikte gösterilecektir:

Kırıcı değişiklikler
v0.8 sürümü, önceki sürümle kırıcı değişiklikler üretmektedir.
Yapılandırma kırıcı değişiklikleri
Aşağıdaki CPT'lerin "Options" bloğu yeniden oluşturulmuştur:
- Schema Configurations
- Custom Endpoints
- Persisted Queries
Önceki v0.7 sürümünde, bu varlıklar için tek bir Options bloğu pek çok yapılandırma öğesi içeriyordu. v0.8 sürümünden itibaren bu blok, her biri kendi yapılandırmasını içeren birkaç bağımsız bloğa ayrılmıştır.
Örneğin, v0.7 sürümünde (endpoint'i etkinleştirme/devre dışı bırakmaya ek olarak) Custom Endpoint Options bloğu GraphiQL ve Interactive Schema istemcilerinin yapılandırılmasına olanak tanıyordu:

v0.8 sürümünden itibaren bu yapılandırma GraphiQL ve Interactive Schema blokları aracılığıyla eklenmektedir:

3 CPT'nin tümü için Options bloklarında saklanan yapılandırma, yeni biçime otomatik olarak taşınmamaktadır. Bu nedenle, v0.8 sürümüne yükseltmeden önce saklanan yapılandırmanızı not edin ve yeni sürüme yükseldikten sonra tekrar oluşturun.
Bu rahatsızlık için özür dileriz.
Ayrıca 3 CPT'nin tüm girişleri için WordPress editöründe gösterilen "Reset the template" düğmesine tıklamanız gerekecektir.

Standart dışı direktifler kaldırıldı
Standart dışı direktifler eklentiden kaldırılmıştır:
@default@removeIfNull@export
Kaldırılan modüller
Aşağıdaki modüller eklentiden kaldırılmıştır:
- Field Deprecation
- Configuration Cache
- Schema Cache
- Multiple Query Execution
- Proactive Feedback
- Schema Editing Access
- Embeddable fields
Gelecek Roadmap
v0.8 gönderildikten sonra ileriye giden yolu planlamaya başlayabiliriz.
Mevcut plan şu şekildedir:
Eylül 2021'de aşağıdakileri içeren v0.9 sürümünü göndermek:
- Custom scalars
- Uygun olduğunda custom scalars kullanan güncellenmiş bir GraphQL şeması (örn:
Post.date,StringyerineDatetürünü döndürecektir) - Eklentileri desteklemek için daha fazla iyileştirme
Ardından, yıl sonu veya 2022'nin başında aşağıdakileri içeren v1.0 sürümünü göndermek:
- Bir eklenti eklentisinin demosu
- Eklenti oluşturma konusunda eksiksiz dokümantasyon kılavuzları
- Gato GraphQL eklentisinin
wp.orgüzerinde yayına girmesi
Mevcut durum hakkında bildirim almak için bültene abone olabilirsiniz.
Sorunla mı karşılaştınız?
v0.8 sürümünü yüklerken veya çalıştırırken herhangi bir sorunla karşılaşırsanız, lütfen depoda bir konu oluşturun.