GraphQL
- Okunuşu
- graf kyu-el
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
Ö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
/graphqlolan tek bir endpoint sunar. - GraphQL bir API katmanıdır; veritabanı değildir.
Örnek
# 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
- APIBackend ve API'ler, s. 2API, bir yazılımın başka bir yazılımdan veri ya da işlem talep etmesini sağlayan, belgelenmiş ve öngörülebilir kurallar bütünüdür.
- REST APIBackend ve API'ler, s. 38REST API, verileri URL'lerle tanımlanan kaynaklar olarak sunan ve istemcilerin onları standart HTTP metotlarıyla okuyup değiştirmesini sağlayan web API'sidir.
- EndpointBackend ve API'ler, s. 11Endpoint, bir API'nin belirli bir kaynak veya eylem için istek alıp yanıt döndürdüğü, bir HTTP metoduyla birlikte kullanılan belirli bir URL'dir.
- JSONBackend ve API'ler, s. 24JSON, yapılandırılmış veriyi anahtar-değer çiftleri ve listelerle saklayıp aktarmaya yarayan, insanın da makinenin de okuyabildiği hafif bir metin biçimidir.
- HTTPWeb Geliştirme, s. 20HTTP, tarayıcıların, uygulamaların ve sunucuların basit bir istek-yanıt döngüsüyle web sayfaları ve veri alışverişi yapmasını sağlayan protokoldür.
- gRPCBackend ve API'ler, s. 19gRPC, uzak sunucudaki fonksiyonları yerelmiş gibi çağırmaya yarayan açık kaynaklı framework'tür; Protocol Buffers ve HTTP/2 ile hızlı, tipli mesajlar taşır.
- Backend for FrontendYazılım Mimarisi, s. 2Backend for frontend, web ya da mobil uygulama gibi her istemci türünün kendi ihtiyaçlarına göre uyarlanmış küçük bir backend aldığı bir mimari desendir.
Kaynaklar
Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin