GraphQL hakkındaki tüm makaleler size bunun ne kadar harika olduğunu söyleyecektir, ancak herhangi bir dezavantajı veya dezavantajı var mı? Teşekkür ederim.
Yanıtlar:
Dezavantajları:
Ancak bunlara karşı olanlar bunlardan daha fazlasıdır:
graphql-spring-boot-starter
ve graphql-java-tools
başlamak için. Şemanızı .graphqls kaynağında oluşturun ve Çözümleyici sınıfları oluşturun ve işiniz bitti. Çalışan bir test örneği elde etmek yaklaşık 10 dakika sürdü.
GraphQL kullanmayı düşünen herkes için bazı önemli endişeler buldum ve şimdiye kadar ana noktalar şunlar:
Belirsiz Derinlikte Sorgu : GraphQL belirsiz derinlikte sorgulama yapamaz, bu nedenle bir ağacınız varsa ve derinliği bilmeden bir dalı döndürmek istiyorsanız, biraz sayfalandırma yapmanız gerekir.
Spesifik Yanıt Yapısı : GraphQL'de yanıt, sorgunun şekline uymaktadır, bu nedenle çok özel bir yapıda yanıt vermeniz gerekiyorsa, yanıtı yeniden şekillendirmek için bir dönüştürme katmanı eklemeniz gerekir.
Ağ Düzeyinde Önbellek : GraphQL'in yaygın olarak HTTP üzerinden (tek bir uç noktada A POST) kullanılması nedeniyle, ağ düzeyinde önbellek zorlaşır. Bunu çözmenin bir yolu Kalıcı Sorguları kullanmaktır.
Dosya Yüklemeyi Yönetme: GraphQL belirtiminde dosya yüklemeyle ilgili hiçbir şey yoktur ve mutasyonlar bağımsız değişkenlerdeki dosyaları kabul etmez. Bunu çözmek için, diğer tür API'leri (REST gibi) kullanarak dosyaları yükleyebilir ve yüklenen dosyanın URL'sini GraphQL mutasyonuna iletebilir veya dosyayı yürütme bağlamında enjekte edebilirsiniz, böylece dosyayı çözümleyici işlevlerinin içine almış olursunuz.
Öngörülemeyen Yürütme : GraphQL'in doğası, istediğiniz alanları birleştirerek sorgulama yapabilmenizdir, ancak bu esneklik ücretsiz değildir. Performans ve N + 1 Sorguları gibi bilinmesi iyi olan bazı endişeler var.
Süper Basit API'ler : Gerçekten basit bir API ortaya çıkaran bir hizmetiniz olması durumunda, GraphQL yalnızca fazladan bir karmaşıklık ekleyecektir, bu nedenle basit bir REST API daha iyi olabilir.
GraphQL ile gördüğüm en büyük sorun, yani ilişkisel veritabanı ile kullanıyorsanız, birleşimlerle ilgili .
Birkaç alana izin verebilmeniz / izin vermemeniz, birleştirmeleri önemsiz hale getirir (basit değil). Bu da ekstra sorgulara yol açar.
Ayrıca dairesel sorgulara graphql derivasyonlarda sorguları Yuvalanmış edebilir sunucunun çökmesine . Ekstra özen gösterilmelidir.
Çağrıların hız sınırlaması zorlaşır çünkü artık kullanıcı tek bir çağrıda birden fazla sorgu çalıştırabilir.
İPUCU : JavaScript / düğüm durumunda sorgu sayısını azaltmak için facebook'un veri yükleyicisini kullanın
cost
İsteği ayrıştırabilir ve atayabilirsiniz . Ayrıca, istemcinin yalnızca kimliği gönderdiği önceden tanımlanmış sorgular kullanıyorsanız, bu bir sorun oluşturmaz.
Her yıl daha iyi ve daha iyi hale geliyor ve şimdilik GraphQL topluluğu büyüyor ve sonuç olarak, daha önce diğer yanıtlarda vurgulanan birçok soruna çok daha fazla çözüm var. Ancak, şirketleri hala tüm kaynakları GraphQL'e atmaktan alıkoyan şeyin ne olduğunu kabul etmek için, bazı sorunları ve çözümleri, ardından çözülmemiş olanları listelemek istiyorum.
Ancak dezavantaj olarak sayılabilecek birkaç durum daha var:
Özetlemek gerekirse, GraphQL yalnızca belirli hedefler için bir araçtır ve elbette tüm sorunların sihirli değneği değildir ve elbette REST'in yerini almaz.
Tek bir uç noktaya sahip olmak ve tüm verileri açığa çıkarmak gerçekten harika. GraphQL için dikkate alınması gereken noktaları aşağıda buluyorum:
Ayrıca, uygulandıktan sonra Artıları dikkate alınmalıdır:
Uygulandıktan sonra bağımsız değişkenler ve özel sıralama kullanarak koşul eklemek kolaydır
Çok sayıda özel filtre kullanın ve oluşturulması gereken tüm eylemlerden kurtulun, örneğin bir kullanıcı argüman olarak id, isim vb. Olabilir ve filtreleme yapabilir. Ayrıca filtreler kullanıcı gruplarına da uygulanabilir.
Bence şu an için graphql arka uç mimarisinin bir parçası olmalı, dosya yüklemek için hala normal bir API'ye ulaşıyorsunuz