GraphQL: Ne, Neden, Nasıl?

Kısaca GraphQL

2012’de Facebook tarafından geliştirilen ve o zamanlar daha çok mobil uygulamalar için kullanılan GraphQL 2015’te open source hale geldi ve 2016’da GitHub’ın da GraphQL’i kullanmaya başlamasıyla popüler olmaya başladı.

GraphQL’in kısa tanımı şöyle: “Query language for your API”. GraphQL, sunucudan veri çekerken istemcilere tam olarak istediklerini vermeyi önceliklendiren bir sorgu dilidir. İstemciler, sunucuya bir şema üzerinden hangi alanları istediklerine göre bir sorgu oluşturur. Sunucu, bu sorguyu işler ve yalnızca istenilen verileri yanıt olarak gönderir. Böylece istemciler geri dönecek verinin alanları ve büyüklüğü üzerinde bir kontrole sahip olabilir. Farklı boyutta ekranlar ve farklı bant genişliğine sahip cihazlar (pc, mobil, tablet, vb.) için yeterli ve uygun verilerin dönmesine olanak sağlar.

Neden GraphQL?

Avantajları:

  • API Documentation: Schema sayesinde API kendini dokümante eder. Swagger gibi ek dokümantasyon aracına ihtiyaç yoktur. Böylelikle servisler arası entegrasyonda kolaylık sağlanır.
  • Data Fetching: Query ile istemcinin yalnızca ihtiyaç duyduğu veriler sorgulanır. Bu sayede overfetch veya underfetch olmadan veri transferi yapılır.
  • Development Experience: Backend değişikliğine bağımlılığı azaltarak frontend tarafında geliştirmeyi hızlandırır.
  • Schema Stiching: Birden fazla GraphQL Schema’sı tek bir şemada birleştirilebilir.
  • Versioning: REST’te versiyonlama URL üzerinde v1, v2 gibi belirteçlerle yapılırken GraphQL’de buna ihtiyaç yoktur. Schema’nın güncellenmesi yeterlidir.
  • Convention: JSON ve HTTP standartlarıyla uyumludur.

Dezavantajları:

  • Tek bir endpoint kullanılması monitoring ve security konularında dezavantaj oluşturuyor.
  • Schema oluşturması sebebiyle kullanımı karmaşık olabilir.
  • Yeni bir teknoloji sayılabileceğinden henüz olgun bir seviyeye ulaşmadı.
  • N+1 problemine sebep olabiliyor.
  • Rate limiting’e ihtiyacı var
  • Declarative data fetch olduğu için cacheleme işlemi zordur.

GraphQL ne zaman kullanılmalı?

  • Çoklu kaynaklardan veri alma: Eğer uygulamanız, birden fazla kaynaktan veri topluyorsa, farklı veri formatlarına sahipse ve bu verileri birleştirmek için karmaşık sorgular yapmanız gerekiyorsa, GraphQL tercih edilebilir.
  • İstemci tarafında özelleştirilebilir sorgu: İstemcilerin ihtiyaç duyduğu verilere göre özelleştirilebilir sorgular yapmak istiyorsanız, GraphQL kullanabilirsiniz.
  • Mimari uyumluluk: Backend For Frontend(BFF) gibi yazılım mimarileri ile uyumlu olduğu için tercih edilebilir.
  • Schema Stitching: Service aggregation uygulanan yerlerde kullanılabilir.
  • İnternet Trafiği: Bant genişliğinin önemli olduğu noktalarda kullanılabilir.

Sunum

 

 

Referanslar

  1. GraphQL https://graphql.org/
  2. How To GraphQL https://www.howtographql.com/
  3. Medium https://medium.com/
  4. What Is GraphQL? REST vs. GraphQL @ ByteByteGo YouTube Channel