JSON-REST tabanlı API’ler günümüzde en çok tercih edilen API iletişim protokolleri arasında yer almaktadırlar. Ancak hızlı değişen ve karmaşıklaşan API tabanlı iletişim ihtiyacını karşılamada yetersiz kalabileceği durumlar da olabilmektedir. GraphQL, bu doğrultuda API’lerin esnekliğini ve verimliliğini artırma hedefi güdüyor. Böylece, sorgunun döneceği yanıtı şekillendirebilmesi ve aynı API ile farklı client gereksinimlerini adresleyebilmesyile popülerlik kazandı.
GraphQL Nedir?
Tanım olarak, temelde bir API sorgulama dili ve çalışma zamanı (runtime) olarak belirtiliyor. Kendisi geleneksel API’lerden biraz farklı. Nitekim, fazla veya az veri çekme durumlarına karşı daha esnek ve hassas bir yaklaşım sunmaktadır. Client uygulamalar, bununla tam olarak ihtiyaçları olan veriyi ve alanları sorgulayabilirler. Yani bu API ile yapılan bir sorgu, tam olarak client’ın ihtiyaç duyduğu veriyi karşılamaktadır.
GraphQL’in geliştirilmesine 2012 yılında Facebook tarafından başlandı ve 2015 yılında artık açık-kaynak hâlini aldı. Şuradan sitesine bir göz gezdirebilirsiniz.
Veri Sorgulama
GraphQL ile yapılan API sorgularında, client, tam ihtiyacı olan veri listesini ve yapısını server’a gönderir. Bu sayede, fazla veri sorgusu ya da yanıtta bulunmayan alanlar nedeniyle gerçekleşen sorgu tekrarları engelleniyor. Ayrıca verimliliği de artıracağı için veri transfer performansı yükselir.

GraphQL ile Tek Endpoint Kullanımı ve Yığın Sorguları (Batched Queries)
GraphQL’in veri sorgulamada esnek olması, aynı zamanda bir çok operasyonun tek bir endpoint ile yapılabilmesine de olanak sağlamaktadır. Bu durum, client implementasyonlarında ayrık endpointler ile iletişime geçmek yerine tek endpoint ile çalışılacağından daha pratik olarak düşünülebilir.
Ayrıca GraphQL sorgularında bir grup sorgu, gruplaranak tek bir istek (request) ile de sunucuya gönderilebilmektedir. Bu sayede açılması gereken bağlantı sayısı, ya da bağlantı havuzundan kullanılan bağlantı sayısı düşmekte, network performansında iyileşme sağlanmaktadır.

Yeni Versiyon Esnekliği
REST API’ler için yeni alanlar devreye almak, değişiklikler oluşturmak genelde versiyonlama gerektirir, hatta uyumsuzluk (compatibility) sorunlarına sebep olabiliyor. GraphQL kullanımında bu gibi durumlara karşı, şemada artırımlı değişiklikler yapma olanağı bulunmaktadır. Bu sayede mevcut istemcilerin erişimleri ve kullanımları bozulmadan, yeni veri alanları kolayca devreye alınabilmektedir.
Gerçek Zamanlı Sorgulamalar
GraphQL ile abonelik (subscription) tabanlı mimariler de kullanılabilmektedir. REST API’ler genellikle tekrar tekrar sorgulama yaklaşımıyla anlık veri değişimlerini görüntüleyebilmekte kullanılırken, GraphQL ile gerçek zamanlı kullanım varsayılan olarak desteklenmektedir.
Kullanım Alanı
GraphQL, özellikle Backend for Frontend (BFF) mimarisinde kullanıma oldukça müsaittir. BFF, farklı istemcilerin ihtiyaçlarına özgü API istekleri yapmayı kolaylaştırmak için pozisyonlandırılmış bir mimari katman olduğu için ve GraphQL, istemcilerin ihtiyaç duyduğu verileri tek bir istekle almasına olanak sağladığı için frontend geliştiricileri tarafından da tercih edilmektedir. Dolayısıyla, istemci ve frontend tarafında daha ölçekli uygulamalara olanak sağlıyor.