GraphQL, sorunlara mimari olarak bir çözüm arayışındayken, Falcor daha alt seviye bir model / ara çözümle benzer sorunlara çözüm arıyordu.

Facebook tarafından geliştirilen/standartlaştırılan GraphQL  “veri sorgulama ve erişimi” için yeni bir yaklaşım tarzı sunuyor. GraphQL, ayrıca Restful mimariye de tamamen yeni bir alternatif olma özelliğiyle dikkat çekiyor.

Mikroservis mimarilerde bileşenlerin veri alışverişinde bulunması için REST API kullanımı oldukça popüler. REST kendi içinde bir dizi problem barındırıyor. REST ile kompleks sorgular yazmak oldukça zor.

GET /customer/?name=Bart&include=address,account&limit=10&offset=20

Müşterinin hangi detayda doldurulup getirileceği belirsiz.


 

Graphql nedir?

GraphQL için “Application Level Query Language” tanımı görebilmekteyiz. Yani bir veri tabanı sorgulama dili vs değil . Çözmeye çalıştığı problem, application level / uygulama seviyesinde istemciler için bir sorgulama ara yüzü oluşturmak. Application levelden kastımız, sunucu tarafında oluşturulan Query Interface ile istemci tarafında bu interface uygun olarak istemcinin kendi sorgularını oluşturabilme imkanını kazanması yeteneği diye düşünebiliriz.

GraphQL bir RPC mekanizmasıdır. Veriye ihtiyacı olan istemciler, ihtiyacı olan veriyi belirli bir şema doğrultusunda tarif ederek isterler.

Merkezde önceden tanımlanmış keşfedilebilir, geçerlenebilir veri modeli vardır.

Önceki paragrafta verdiğimiz örnek aşağıdaki şekilde sağlanabilir.

{
 findCustomerByName (name:”Bart”,offset: 20, limit: 10){
         name
         surname
         addresses{
            street
            city

         }
         accounts{
            account_no
            balance
        }
   }
}

Aşağıdaki iki resme bakarak GraphQL ve REST/MVC yapıları arasındaki ilk ayrışımı görebiliriz.

Klasik MVC/Rest

GraphQL

İkinci ayrımız olan “istemcinin isteğini kendi ihtiyacına göre tanımlayabilmesi” konusu için aşağıdaki sorguya bakalım;

Yukarıdaki görüntüde sol taraftaki GraphQL sorgumuzun ne kadar anlaşılır ve “declarative” olduğunu görüyoruz. Sorgumuzun aldığı cevap ise sağ tarafta. Klasik Rest/MVC yapısı ile en az 2-3 farklı controller gerektiren ve birkaç HTTP Request ile yapabileceğimiz işlemin GraphQL ile ne kadar sade bir şekilde gerçekleştiği aşikar.

Şimdiye dek konuştuğumuz konulara bir kaç ekleme daha yaparak devam edelim. GraphQL, mimarisi iki parçalı bir yapıdan oluşmakta;

  • GraphQL  sunucusu (Aplicaton Level Query Layer )
  • GraphQL istemcisi, (sorguları düzgün bir şekilde oluşturup, sunucu ile iletişimi kuracak client)

Hemen belirtelim, GraphQL istemcisi çok karışık komplex bir yapı değil ve teknik olarak zorunluda değil, sorgularımızı bu tür bir yardımcı olmadan da kendimiz oluşuturup sunucuya gönderebiliriz ve cevabı kendi kendimize işleyebiliriz. Ama Tahmin edeceğiniz gibi bu durum çok iş yükü getirecektir, o yüzden hazır istemcilerden birini seçip kullanmak en ideali.

Sunucu tarafındaki GraphQL alt yapısı ise yine hazır bir framework kullanmadan ve GraphQL standartlarına uyarak hemen hemen her türlü dil ve platform için gerçeklenebilir.Ama sıfırdan kendi GraphQL sunucumuzu oluşturmak muhtemelen pek isteyeceğimiz bir durum degil. Yazınnın devamında bugün itibariyle kullanabileceğimiz bazı alternatiflerden bahsedeceğiz ama genel olarak bir GraphQL sunucusu aşağıdaki gibi bir yapıya sahip diyebiliriz;

Schema GraphQL yapısı gereği, strongly  typed / veri tipi zorunluluğu gerektiren bir veri katmanına ihtiyaç duymakta. GraphQL standartlarına göre bu veri şemalarımıza yada bir başka değişle “data types” ihtiyacımız var.

Resolve functions GraphQL sunucumuzun verileri nerden ve nasıl temin edeceğini tanımlaycak fonksiyonlar.

Yukarıdaki iki maddeye başka eklemeler yapılabilir ama, bunları en önemli iki madde olarak düşünebiliriz.