Kavramlar, Fikirler, Stratejiler
Kavramlar, Fikirler, StratejilerAlan ve direktif versiyonlama kullanım durumları

Alan ve direktif versiyonlama kullanım durumları

Lütfen önce Alan versiyonlama ile şemayı geliştirme kılavuzunu okuyun; bu kılavuz Gato GraphQL'deki "field versioning" özelliğini açıklamaktadır.

Gato GraphQL, alanların ve direktiflerin versionConstraint argümanını almasına olanak tanır; böylece alanın/direktifin hangi spesifik versiyonu (yani uygulaması) kullanılacağı seçilebilir:

query GetPosts {
  posts(versionConstraint: "^1.0") {
    id
    title(versionConstraint: ">=2.1")
    excerpt @strUpperCase(versionConstraint: "~1.5.3")
  }
}

Bir alan (veya direktif), versiyonu olmayan varsayılan bir uygulamaya da sahip olabilir (bu, sorguda versionConstraint sağlanmadığında kullanılan uygulamadır).

İnceleme (introspection) yapılırken yalnızca varsayılan alanların ve direktiflerin verileri alınır. Sonuç olarak, varsayılan alan veya direktif bunu desteklemediğinden, versionConstraint argümanı introspection sırasında hiçbir zaman görünmez.

Bu nedenle, bir alan veya direktifin aralarından seçim yapılabilecek iki veya daha fazla versiyonu olduğunu her zaman önceden bilmemiz ve bu versiyon numaralarının neler olduğunu bilmemiz gerekir. Bu bilgi, varsayılan olarak herkese açık değildir.

Peki versiyonlama ne işe yarar? İşte birkaç kullanım durumu.

Belirli bir kullanıcı için hızlı bir hata düzeltmesi sağlama

Diyelim ki web sitenizde dağıtılmış bir GraphQL API'niz var ve belirli bir kullanıcı alanın beklendiği gibi çalışmadığından şikâyet ediyor. Ancak bu yalnızca bu bir kullanıcı için oluyor; başka kimse sorun yaşamıyor gibi görünüyor.

Sorunu tespit edip düzeltiyorsunuz, ancak değişikliği herkese dağıtmadan önce çalıştığından emin olmak istiyorsunuz. Bu durumda değişikliği "1.0.1" versiyonuyla yeni bir field resolver altında dağıtabilir ve sorunu yaşayan kullanıcıdan GraphQL sorgusunu bu alan versiyonuna işaret edecek şekilde değiştirmesini isteyebilirsiniz:

{
  someBuggyField(versionConstraint: "1.0.1")
}

Hata gerçekten düzeltildiyse, yalnızca o zaman kodu varsayılan field resolver'a kopyalayın.

Seçili kullanıcılardan yaklaşan bir sürümü test etmelerini isteme

Bir alan veya direktif versiyonlanmışsa ve varsayılan (yani versiyonsuz) bir uygulaması yoksa, introspection sırasında hiç görünmeyecektir.

{
  someField
    # Bu direktifin varsayılan uygulaması yoktur,
    # bu nedenle introspection sırasında görünmez,
    # ancak onu karşılayan bir kısıtlama sağlandığında
    # GraphQL sorgusuna yine de eklenebilir
    @someExperimentalDirective(versionConstraint: ">1.0")
}

Ardından alanı veya direktifi dağıtabilirsiniz; GraphQL API'de görünmeyecektir. Seçili kullanıcılardan bunu test etmelerini isteyebilirsiniz; bu kullanıcıların kullanmak için sorgularında ilgili versionConstraint argümanını girmesi gerekir.

Kabul edildikten sonra versiyonlama kaldırılır ve alan veya direktif introspection aracılığıyla görünür hale gelir, dolayısıyla herkes tarafından erişilebilir olur.