Ana içeriğe geç

GraphQL

Okunuşu
graf kyu-el
Güncellendi 2 dk okuma

Bu sayfayı paylaşın

Bağlantıyı gönderin, tanımı bağlantısıyla birlikte alıntılayın ya da kendi sitenizde bir kart olarak gösterin.

https://softwaredictionary.org/tr/terimler/graphql

Kısaca

GraphQL, istemcilerin tam ihtiyaç duyduğu veriyi, çoğunlukla tek bir endpoint üzerinden tek istekte istemesini sağlayan API sorgu dili ve çalışma zamanıdır.

GraphQL nedir?

GraphQL, istemcinin istediği verinin tam biçimini tarif eden bir sorgu yazdığı, sunucunun da aynı biçimde JSON döndürdüğü bir API kurma ve kullanma yöntemidir. 2012'de Facebook'ta geliştirildi, 2015'te açık kaynak olarak yayımlandı ve bugün GraphQL Foundation tarafından sürdürülüyor.

Her GraphQL API'si bir şemanın (schema) etrafında kurulur; şema, sunduğu tüm veri ve işlemlerin tip bilgisi içeren bir tanımıdır. İstemciler veri okumak için query, veri değiştirmek için mutation, gerçek zamanlı güncellemeler almak için de subscription gönderir. Sunucu tarafında resolver adı verilen küçük fonksiyonlar, her alanın değerini bir veritabanından, başka bir API'den ya da herhangi bir kaynaktan getirir.

Faydalı bir benzetme açık büfe ile sabit menüdür. REST endpoint'i her zaman aynı tabağı sunan sabit menü gibidir; GraphQL ise tabağınıza hangi yemekleri koyacağınızı seçmenizi sağlar. Bu, birbiriyle ilişkili birçok nesneden aynı anda veri isteyen mobil uygulamalar ve karmaşık kullanıcı arayüzleri için özellikle işe yarar.

GraphQL bir veritabanı değildir ve SQL'in yerini almaz; veri kaynaklarınızın önünde bir API katmanı olarak durur. REST'e kıyasla over-fetching'i (ihtiyaç duyulmayan alanların gelmesi) ve under-fetching'i (her şeyi almak için birden fazla istek gerekmesi) önler; ancak isteklerin çoğu tek bir endpoint'e gittiği için HTTP önbellekleme ve rate limiting işini zorlaştırır.

Bir bakışta

Bir istemci tek /graphql endpoint'ine bir kullanıcının adını ve gönderilerinin başlıklarını isteyen tek bir GraphQL sorgusu gönderir, sunucu da tam olarak bu biçimde JSON ile yanıt verir; REST'te aynı veri, tüm alanları döndüren iki istek gerektirirdi.sorgu: istediğiniz alanlar{ user(id: 42) { name posts { title } }}SunucuPOST /graphqltek endpointyanıt: aynı biçim{ "data": { "user": { "name": "Ada", "posts": [{ "title": "Hi" }] }} }REST: GET /users/42 + GET /users/42/posts = 2 istek, tüm alanlar
Yanıt, sorguyu satır satır izler: istemci yalnızca adını verdiği alanları alır, hem de tek istekte.

Önemli noktalar

  • İstemciler, yanıtta hangi alanları istediklerini tam olarak belirtir.
  • Tip bilgisi içeren bir şema, mevcut tüm veri ve işlemleri tanımlar.
  • Query'ler veri okur, mutation'lar veriyi değiştirir, subscription'lar güncellemeleri akıtır.
  • Çoğu GraphQL API'si, çoğunlukla /graphql olan tek bir endpoint sunar.
  • GraphQL bir API katmanıdır; veritabanı değildir.

Örnek

İç içe veri için bir GraphQL sorgusugraphql
# Ask for a user's name and the titles of their 3 latest posts
query {
  user(id: "42") {
    name
    posts(last: 3) {
      title
    }
  }
}

# The response is JSON with exactly the same shape:
# { "data": { "user": { "name": "Ada", "posts": [{ "title": "..." }] } } }

Sık sorulan sorular

GraphQL, REST'ten daha mı iyidir?

İkisi de her durumda daha iyi değildir. GraphQL, istemcilerin birçok kaynaktan esnek ve iç içe veri ihtiyacı olduğunda öne çıkar; REST ise basit kaynaklar için kurması, önbelleğe alması ve izlemesi daha kolaydır.

GraphQL bir veritabanı mıdır?

Hayır. GraphQL bir API sorgu dilidir; gerçek veriyi sunucudaki resolver'lar arka planda veritabanlarından, diğer servislerden ya da dosyalardan getirir.

GraphQL, HTTP kullanır mı?

Genellikle evet. Çoğu GraphQL API'si sorguları tek bir endpoint'e HTTP POST istekleri olarak alır; ancak spesifikasyonun kendisi belirli bir taşıma yöntemi şart koşmaz.

Sık karşılaştırılanlar

İlgili sayfalar

Kaynaklar

Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin

Daha fazla

Ayarlar