GraphQL Nedir? API'ler İçin Sorgu Dili
GraphQL, istemcinin sunucudan tam olarak ihtiyaç duyduğu veriyi tek istekte almasını sağlayan bir API sorgu dili ve çalışma zamanıdır. Güçlü tiplenmiş şema, query/mutation/subscription işlemleri ve resolver mantığıyla REST'in aşırı ve yetersiz veri çekme sorunlarını çözer.
GraphQL, API'ler için geliştirilmiş bir sorgu dili ve bu sorguları çalıştıran bir sunucu tarafı çalışma zamanıdır. 2012'de Facebook içinde geliştirilmiş, 2015'te açık kaynak olarak yayınlanmış ve bugün bağımsız GraphQL Vakfı tarafından yönetiliyor. Temel vaadi basittir: İstemci, sunucudan tam olarak ihtiyaç duyduğu veriyi, tek bir istekte alabilsin — ne eksik ne fazla.
GraphQL'i anlamanın en kolay yolu, çözmeye çalıştığı sorunu geleneksel REST API'lerle karşılaştırmaktır.
REST'in iki klasik sorunu
REST API'lerde her kaynak genellikle sabit bir adrese (endpoint) sahiptir ve her adres önceden belirlenmiş bir veri yapısı döner. Bu, iki yaygın verimsizliğe yol açar:
- Aşırı veri çekme (over-fetching): Sadece bir kullanıcının adını istiyorsunuz, ama
/users/1adresi adres, telefon, sipariş geçmişi dahil her şeyi döndürüyor. Gereksiz veri hem bant genişliği hem işlem israfıdır. - Yetersiz veri çekme (under-fetching): Bir ekranı doldurmak için kullanıcıyı, siparişlerini ve her siparişin ürünlerini göstermeniz gerekiyor. Bu, art arda üç ayrı isteğe (
/users/1,/users/1/orders,/orders/.../items) dönüşür. Çok sayıda gidip gelme, özellikle mobil ağlarda uygulamayı yavaşlatır.
GraphQL bu iki sorunu da tek bir esnek istekle ortadan kaldırır.
Şema: Sözleşmenin merkezi
Her GraphQL API'sinin merkezinde bir şema (schema) vardır. Şema, API'nin sunduğu tüm veri tiplerini ve bunlar arasındaki ilişkileri güçlü biçimde tiplenmiş olarak tanımlar — bir tür sözleşme. İstemci yalnızca şemada tanımlı alanları sorgulayabilir; bu da hem öngörülebilirlik hem de güçlü araç desteği sağlar. Örneğin bir istemci şunu sorabilir:
usertipinden yalnızcaadveemailalanlarını,- aynı istekte o kullanıcının
siparislerilişkisini, - ve her siparişin yalnızca
tarihalanını.
Sunucu da tam olarak bu şekli taşıyan bir JSON döndürür. İstemci isteğin biçimini belirler; sunucu bu biçmi doldurur.
Üç temel işlem türü
GraphQL'de istemci-sunucu etkileşimi üç tür işlemle yürür:
- Query (sorgu): Veri okuma işlemleri. REST'teki GET'in karşılığı.
- Mutation (değişiklik): Veri oluşturma, güncelleme, silme. Yazma işlemleri bu tür altında, açıkça ayrılmış biçimde yapılır.
- Subscription (abonelik): Sunucudaki değişiklikleri gerçek zamanlı olarak istemciye iletmek için kullanılır; canlı güncelleme gerektiren uygulamalarda işe yarar.
Tek adres, resolver'lar
REST'in aksine GraphQL tipik olarak tek bir adres (genellikle /graphql) üzerinden çalışır. Gelen her sorgu bu adrese POST edilir. Sunucu tarafında, sorgudaki her alan bir resolver fonksiyonuyla eşleşir; resolver o alanın verisini nereden (veritabanı, başka bir servis, önbellek) getireceğini bilir. Böylece veri kaynakları istemciden gizlenir ve tek bir sorgu birden fazla kaynaktan derlenebilir.
GraphQL ne zaman doğru seçim, ne zaman değil?
GraphQL her zaman REST'in yerini almaz; bir araçtır, gümüş kurşun değil. Güçlü olduğu yerler:
- Çok sayıda farklı istemcinin (web, mobil, üçüncü taraf) aynı API'den farklı veri şekilleri istediği durumlar.
- Birçok ilişkili kaynağın tek ekranda birleştiği, veri yoğun arayüzler.
- Hızlı değişen ürünlerde, istemcinin sunucuyu değiştirmeden yeni alanlar talep edebilmesi.
Buna karşılık basit, az sayıda kaynağı olan servislerde REST daha az kurulum ve daha az karmaşıklıkla aynı işi görebilir. GraphQL ayrıca önbellekleme ve sorgu karmaşıklığı denetimi gibi konularda ek özen gerektirir.
Nereden başlamalı?
GraphQL'in resmi sitesi, dilin özelliklerini, örnek sorguları ve kavramları adım adım açıklayan interaktif bir öğrenme deneyimi sunar. Pratikte çoğu geliştirici, bir dil için hazır bir GraphQL sunucu kütüphanesi ve istemci tarafında sorguları yöneten bir istemci kütüphanesiyle başlar. Önce şema tasarımını, ardından query/mutation ayrımını ve resolver mantığını kavramak, teknolojinin bütününü oturtmanın en sağlıklı yoludur.
Benzer İçerikler
Nginx Nedir? Web Sunucusu, Ters Vekil ve Yük Dengeleyici
Nginx, olay tabanlı asenkron mimarisiyle çok sayıda eşzamanlı bağlantıyı düşük kaynakla karşılayan açık kaynaklı bir web sunucusudur. Statik içerik sunmanın yanı sıra ters vekil (reverse proxy), yük dengeleyici ve önbellek olarak da kullanılır; server ve location blokları üzerinden bildirimsel olarak yapılandırılır.
27 Eki 20261 kaynakWEB2 DKWebAssembly Nedir? Tarayıcıda Neredeyse Yerel Hız
WebAssembly (Wasm), tarayıcıda neredeyse yerel hızda çalışan, düşük seviyeli bir ikili komut biçimidir. JavaScript'in yerini almaz, onu tamamlar: C, C++, Rust gibi dillerden derlenen performans kritik kodu güvenli bir korumalı alanda çalıştırır. WASI ile artık tarayıcı dışında da kullanılıyor.
27 Eki 20262 kaynakWEB1 DKAwesome React Native: Geliştiriciler İçin Kaynaklar ve Araçlar
React Native ile yapılan uygulama geliştirme sürecinizi kolaylaştıracak kaynaklar, araçlar ve öğrenme materyalleri hakkında bilgi edinin.
8 Eyl 20268 kaynak