GraphQL İşlemleri ve REST İle Farkı

Yaren Hilal Ürkmez
Coreborn
Published in
3 min readJul 9, 2021

GraphQL Nedir ?

Kısaca GraphQL, API’ler için bir sorgu dilidir. Tam olarak neye ihtiyaç duyuluyorsa onu API’ye sormayı sağlar istenilenden daha fazlasını vermez.Bu sorgular her zaman öngörülebilir çıktılar vermektedir. GraphQL kullanan uygulamalar, sunucuyu değil, aldıkları verileri kontrol ettikleri için hızlı ve kararlıdır.

GraphQL vs Rest Api

1-REST ile, gerekli verileri almak için farklı uç noktalara isteklerde bulunmamız gerekir ve istediğimizden daha fazla bilgi almak zorunda kalabiliriz.Oysaki GraphQL ile istediğimiz bilgiliyi tek bir sorguda alabiliriz. Böylelikle Aşırıya kaçma ve eksik bilgi getirme önlenmiş olur. Birden çok API çağrısı önlenmiş olur.

2-REST’te kaynağın şekli ve boyutu sunucu tarafından belirlenir. GraphQL’de sunucu hangi kaynakların mevcut olduğunu bildirir ve istemci o anda neye ihtiyacı olduğunu sorar.

3-REST’te, veriler, doğrusal bir endpoint listesi olarak tanımlanır. GraphQL’de ise bu, ilişkileri olan bir şemadır. GraphQL API’leri, uç noktalara göre değil, türlere ve alanlara göre düzenlenir. Verilerinizin tüm özelliklerine tek bir uç noktadan erişmeye olanak tanır.

4-GraphQl,API geliştiricilerine olan bağımlılığı ortadan kaldırır. Uygulamamızın daha performanslı çalışması için REST ile çalışırken yeni bir API istemek zorunda kalabilirken bu durum GraphQl de ortadan kalkmaktadır.

GraphQL İşlemleri

  • query(salt okunur getirme)
  • mutation(bir yazma ve ardından getirme)
  • subscription(kaynak olaylara yanıt olarak veri getiren uzun süreli bir istek.)

Sorgular(Query)

Bir istemcinin bir sunucuya gönderebileceği örnek bir sorgu ve çıktısı aşağıdaki gibidir:

GraphQL Sorgusu ve Çıktısı

Bu sorgudaki, getAllUsers sorgunun kök alanı olarak adlandırılır. Kök alanını takip eden her şeye sorgunun yükü denir. Bu sorgunun yükleride name, surname, userName ve email alanlarıdır.Bu sorgu veritabanında olan tüm kullanıcıların istediğimiz alanları içeren bir çıktı döndürür.

Basit sorguların ek olarak argümanlı sorgularda yazabiliriz örneğin;

GraphQL de her alan sıfır veya daha fazla argüman alabilir.Yukarıda limit argümanına göre veritabanından döndürülen çıktıyı görmekteyiz.

Mutation

GraphQL de depolanan verilerdeki değişiklikler mutation kullanılarak yapılır .

Üç tür mutation vardır:

  • yeni veri oluşturma
  • mevcut verileri güncelleme
  • mevcut verileri silme

Yeni veri oluşturacak olursak:

Daha önce yazdığımız sorguya benzer şekilde, mutasyonun da bir kök alanı burda da vardır.(addNewCategory) Ayrıca bu alan argüman olarak bir obje almıştır. Bir sorguda olduğu gibi(sağdaki fotoğrafta) yeni nesnenin farklı özelliklerini isteyebiliriz. Bu örnekte tabikide dönütü bilsekte mutationları gönderirken bilgileri de sorgulayabilmek, sunucudan yeni bilgileri tek bir gidiş-dönüşte almamıza izin vermesi daha büyük projelerde çok güçlü bir araç olabilir.

Yukarıdaki sorgudaki gibi bu özellik default olarak atanan verileri görebilmemiz için bize olanak sağlar.

Daha önceden eklediğimiz Sağlık kategorisini güncelleyecek olursak ;

Daha önceden eklediğimiz Yaşam kategorisini silecek olursak ;

Subscription

Queryler gibi, Subscriptionlar da veri alınımını sağlar. Fakat Subscriptionlar, zamanla sonuçlarını değiştirebilen uzun süreli işlemlerdir. GraphQL sunucunuzla aktif bir bağlantı kurabilirler ve sunucunun abonelik sonucuna yönelik güncellemeleri göndermesini sağlarlar.

Subscriptionlar, yeni bir nesnenin oluşturulması veya önemli bir alanda yapılan güncellemeler gibi arka uç verilerindeki değişiklikler hakkında gerçek zamanlı olarak bilgilendirmek için kullanışlıdır.

Ne zaman kullanılmalı?

  • Düşük gecikmeli, gerçek zamanlı güncellemelerde kullanılabilir.Örneğin bir sohbet uygulaması.
  • Büyük nesnelerde küçük artımlı değişiklikler için kullanılabilir.

--

--