Neden GraphQL Değişken Mutasyon sözdizimi Yani Gereksiz mi?

oy
0

GraphQL sorgular / mutasyonlar süper temiz: onlar sadece aslında neyi gerektirir gerektiren , başka bir şey. Ya da en azından temel olanlardır.

Ya biri ile değişkenleri kullanabilir Ama eğer Sözdiziminizin kaçınılmaz içinde fazlalık vardır:

query HeroNameAndFriends($episode: Episode) {
  hero(episode: $episode) {
    name
    friends {
      name
    }
  }
}

Not $episode: Episodeve episode: $episode. Şey HER GraphQL mutasyon aynı yedekleme gerektirmeyen şudur: değişkenler kullanırsanız, her argüman iki kez tanımlanmış olması gerekir (ve yapıyorsanız programlı sorgular, hiç şüphesiz değişkenleri kullandığınız).

Benim sorum, neden? GraphQL onların argümanları ikinci kez tekrarlamak zorunda kullanan herkesin yapmak o kadar gereksiz görünüyor.

Neden sadece sözdizimi yapamaz:

query HeroNameAndFriends() {
  hero(episode: Episode) {
    name
    friends {
      name
    }
  }
}

sizin gerçekten değişken adları farklı izin gerekiyorsa veya isteğe bağlı bir üçüncü kısmını izin:

query HeroNameAndFriends() {
  hero(episode: Episode : $episode) {
    name
    friends {
      name
    }
  }
}

Açık olmak gerekirse, ben değişken kullanarak sorguları olmayan değişken olanlardan farklı olduğunun anlaşılması, ama yaklaşık is soruyorum, neden kendilerini tekrar herkesi zorlar, bu sorgulara ilişkin bir sözdizimi almak?

Sadece çok ... KURU değil görünüyor! Şüphesiz bu tekrarlama neden önemli nedeni eksik olduğunu gerekli?

Oluştur 10/10/2019 saat 00:47
kaynak kullanıcı
Diğer dillerde...                            


1 cevaplar

oy
2

Neden bir JavaScript işlevi benim argümanlar listelemek gerekiyor? o işlevi açık değil mi

const getFullName = () => firstname + ' ' + lastname;

İki argüman, adında biri alır firstnameadında bir lastname? Gelirken aracılığıyla görmek kolaydır burada düşünüyorum ama o kadar açık değildir ki daha karmaşık durumlar vardır. Şimdi Yukarıdaki örnekte garip görünüyor ama böyle ifadeler bazı fonksiyonel programlama dilleri vardır (_ + 2)ve _.concat(_)geçerli fonksiyon ifadelerdir. Ve (size bakıyor, nokta ücretsiz Haskell) bazı oldukça iğrenç kodu oluşturabilirsiniz. Ama dillerin bir sürü kod parçası girişini ilan açıkça iyi bir fikir olduğunu düşünüyor.

Geri GraphQL için: değişkenler gerçekten tam bir değişken uygulama olduğu için en değişkenlerden bazıları daha karmaşık kullanımlar bakalım. Tıpkı bir argüman uygulamadan sonra onlarla daha fazlasını yapabilir:

query NestedInput($name: String) {
  user(where: { name: { contains: $name } }) { ... }
}

query WithDirective($long: Boolean) {
  users {
    name
    bio @include(if: $long)
    friends(showAll: $long) {
      name
    }
  }
}

Yani değişkenler yerlerde bir sürü kullanılabilir ve aynı zamanda birden fazla kez kullanılabilir. Ve seyrek GraphQL değil sorgular gerçekten büyük hale gelir. Eğer ikinci sözdizimi ile bu iş önerdi olurdu? Evet, ama ben okunabilirliği düşüş olacağını düşünüyorum. KURU sen yazmak zorunda karakter miktarını azaltarak ilgili değil ama hataların azaltılmasını ilgili değil. Ama genellikle şeyleri açık olmak da hataları (bu gün giriş parametreleri ve bunların türleri hakkında açık olma konusunda olan tip sistemlerin örneğin çok) azaltabilir.

sanırım Yani GraphQL geliştiricileri tarafından yapıldı kararın ticaret sade ve onlar açık versiyonunu seçti. bağlam unutmayın: GraphQL Facebook, dünyanın en büyük web uygulamaları birinde oluşturuldu.

anlaşılırlığı arttırmak yararları burada bariz olmadığından birkaç listeleyen bir düzenleme geçerli:

  • deklarasyon geliştirici hızla bir sorgudaki tüm değişkenleri ve bunlara karşılık gelen türlerini anlamak için izin verir.
  • GraphQL geliştirici takım basitçe giriş tipini arama yapabilirsiniz yerine pahalıya şema değişkenlerin türünü tahmin zorunda ve gelmez.
  • Hata mesajları argüman hayal, anlamak daha kolay olsun showAllBoolean ama int'leri almaz. Beyanı ile söyleyebiliriz mismatching types for variable $long. $long is Boolean but expected Int. O beyan değilse biz söylemek gerekir $long is sometimes used as Boolean, sometimes as Int. Ne üç farklı türde olarak kullanmak olur?
  • Breaking sorgular GraphQL yalnızca statik kod analizi ile tespit edilebildiğini: Yine türünü değiştirmek hayal showAlletmek Int. Açık tip beyanı olmadan sorgu yerine zamanında bozabilir iken Bu durumda sorgu, yanlış olarak tespit edilebilir.
Cevap 10/10/2019 saat 01:32
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more