Yeni Başlayanlar İçin GraphQL Eğitimi: Nedir, Özellikler ve Örnek
⚡ Akıllı Özet
GraphQL, istemcinin tek bir çağrıda tam olarak ihtiyaç duyduğu veriyi istemesine olanak tanıyan sunucu tarafı bir sorgu dilidir. Bu sayfa, temel bileşenlerini, sorgularını, değişkenlerini, mutasyonlarını, aboneliklerini ve REST'ten nasıl farklı olduğunu açıklamaktadır.

GraphQL nedir?
GraphQL Facebook (şimdiki adıyla Meta) tarafından mevcut verilerle sorgular yürütmek için geliştirilen bir uygulama katmanı sunucu tarafı teknolojisidir. 2015 yılında kamuya açık olarak yayınlanmıştır ve GraphQL tarafından yönetilmektedir. Foundation 2018'den beri GraphQL, RESTful API çağrılarını optimize edebilir. Verilerinizi alma ve güncelleme konusunda bildirimsel bir yöntem sunar. GraphQL, sunucudan istemciye veri yüklemenize yardımcı olur. Programcıların yapmak istedikleri istek türlerini seçmelerini sağlar.
GraphQL öğrenmeden önce neleri öğrenmeniz gerekiyor?
Bu GraphQL eğitimi temel alınmıştır Ekspres hem de NodeJ'ler. Bu nedenle temel NodeJS anlayışıyla GraphQL'i çok kolay bir şekilde öğrenebilirsiniz.
GraphQL'i neden kullanmalıyım?
GraphQL kullanmanın nedenleri şunlardır:
- İnsan tarafından okunabilen bir sorgu sağlar.
- GraphQL'de birçok veritabanıyla çalışmak çok kolaydır.
- Mikroservisler ve karmaşık sistemler için uygundur.
- Tek bir API çağrısıyla veri getirebilirsiniz.
- Sorgu toplu işleme ve önbelleğe alma konusunda size yardımcı olur.
- Fazla veri çekme veya eksik veri çekme sorunlarıyla karşılaşmazsınız.
- İsteklerinizi ihtiyaçlarınıza göre uyarlamak.
- Şemayı uygun formatta keşfetmenize yardımcı olur.
- GraphQL, API değişiklikleriyle dokümantasyonu otomatik olarak senkronize tutar.
- API gelişimi sürüm oluşturma olmadan mümkündür.
- GraphQL alanları, yeniden kullanım için daha yüksek bir bileşen düzeyinde paylaşılabilen birden fazla sorguda kullanılır.
- Hangi işlevlerin ortaya çıkarılacağını ve nasıl çalışacaklarını seçebilirsiniz.
- Hızlı uygulama prototiplemesi için kullanılabilir.ping.
GraphQL Uygulamaları
GraphQL'in önemli uygulamaları şunlardır:
- Röle ve diğer istemci çerçevelerini sağlar
- GraphQL, mobil uygulamanın performansını artırmanıza yardımcı olur.
- Sunucu tarafı bulut hizmetini azaltarak aşırı getirme sorununu azaltabilir ve istemci tarafı ağ kullanımını azaltabilir.
- İstemci uygulamasının uzun sorgu biçiminde hangi alanların gerekli olduğunu belirtmesi gerektiğinde kullanılabilir.
- Eski veya mevcut API'nize işlevsellik eklemeniz gerektiğinde GraphQL'den tam olarak yararlanılabilir.
- Karmaşık API'leri basitleştirmek istediğinizde kullanılır.
- Nesne yönelimli programlamada yaygın olarak kullanılan cephe desenini karıştırın ve ezin.
- Birden fazla yerden verileri tek bir kullanışlı API'de toplamanız gerektiğinde.
- GraphQL'i bir mutlak çözüm olarak kullanabilirsiniz.tracKullanıcı ihtiyaçlarına göre yanıt yapısını belirlemek için mevcut bir API üzerinde değişiklik yapmak.
Bu faydaların tamamı, birlikte çalışan üç hareketli parçaya dayanmaktadır.
GraphQL Temel Bileşenleri
Şimdi bu GraphQL eğitiminde GraphQL'in temel bileşenlerini öğrenelim:

Yukarıdaki şekilde gösterildiği gibi GraphQL'in üç temel bileşeni vardır: 1) Sorgu, 2) Çözümleyici ve 3) Şema.
Sorgu
Sorgu, istemci makine uygulaması tarafından yapılan bir API isteğidir. Arttırmaları destekler ve dizilere işaret eder. Sorgu değerleri okumak veya getirmek için kullanılır.
Sorgunun Parçaları:
Sorgulamanın önemli kısımları şunlardır
- Alan:
Bir alan, sunucudan belirli bir bilgi istediğimizi gösterir. Aşağıda, bir GraphQL sorgusundaki bir alanın GraphQL örneği verilmiştir.
query {
team {
id
name
}
}
Sunucu, sorgunun şeklini yansıtan bir JSON belgesiyle yanıt verir:
{
"data": {
"team": [
{
"id": 1,
"name": "Avengers"
}
]
}
}
Yukarıdaki GraphQL örneğinde, sunucudan "team" adlı alanı ve "id" ve "name" gibi alt alanlarını istiyoruz. GraphQL sunucusu, istediğimiz verileri tam olarak döndürüyor.
- Argümanlar
In DİNLENMEYalnızca tek bir argüman kümesini iletebiliriz. URL Segmentler ve sorgu parametreleri. Belirli bir profili almak için tipik bir REST çağrısı aşağıdaki gibi olacaktır:
GET /api/team?id=2 Content-Type: application/json { "id": 2, "name": "Justice League" }
Çözmek
Çözümleyiciler, GraphQL işlemini verilere dönüştürmek için talimatlar sağlar. Çözümleyici fonksiyonlarını tanımlayarak sorguyu verilere çözerler.
Belirli bir alana göre verileri almak için sunucuya işlemin yanı sıra konumu da görüntüler. Çözümleyici ayrıca veritabanı şemasını ve API şemasını da ayırır. Ayrılmış bilgiler veritabanından elde edilen içeriğin değiştirilmesine yardımcı olur.
Şema
GraphQL şeması, GraphQL uygulamasının merkezidir. Kendisine bağlanan istemcilerin kullanabileceği işlevselliği açıklar.
GraphQL'in Özellikleri
GraphQL'in önemli özellikleri şunlardır:
- Zorunlu olmayan bildirimsel sorgu dili sağlar.
- Hiyerarşik ve ürün merkezlidir.
- GraphQL güçlü bir şekilde yazılmıştır. Bu, sorguların belirli bir sistem bağlamında yürütüldüğü anlamına gelir.
- GraphQL'deki sorgular sunucuda değil istemcide kodlanır.
- OSI modelinin uygulama katmanının tüm özelliklerine sahiptir.
GraphQL İstemcileri
GraphQL istemcisi, ilgili GraphQL Sunucusuna POST istekleri gönderen bir koddur. Bir GraphQL API'sini doğrudan sorgulayabilirsiniz, ancak iyi bir yaklaşım, Relay kullanarak özel bir istemci kitaplığından yararlanmaktır.
Bu JavaScript kütüphanesi, Facebook tarafından GraphQL ile React uygulamaları yapmak için geliştirilmiştir. GraphQL istemcileri Drupal gibi bir CMS, tek sayfalık bir uygulama, bir mobil uygulama vb. olabilir.
GraphQL Sunucuları
GraphQL sunucuları, GraphQL spesifikasyonunun sunucu tarafı uygulamalarıdır. Verilerinizi, istemci programınızın sorgulayabileceği bir GraphQL API'si olarak gösterir. veritabanı.
GraphQL Ağ Geçitleri
Gateway, diğer arka uç servisleriyle başa çıkmak için ayrı bir servis oluşturabileceğiniz bir mikro servis modelidir. Kullanışlı bir dokümantasyon sunar ve tek bir istekle birden fazla kaynaktan veri toplamanın uygun bir yolunu sağlar.
GraphQL'deki değişken nedir?
A GraphQL'deki değişken Dinamik değerleri istemci sorgusundan ayırmak ve sorguyu benzersiz bir sözlük olarak iletmek için kullanılır. GraphQL'deki değişken, istemci tarafından yazılan sorgunun veya mutasyonların bireysel argümanlarla yeniden kullanılması için de kullanılabilir. GraphQL'de dinamik argümanları doğrudan sorgu dizesine iletemezsiniz. Bunun nedeni, istemci tarafı kodunun, programı çalıştırdığınız sırada sorgu dizesini dinamik olarak değiştirmesi gerekmesidir.
GraphQL, sorgudan dinamik değerleri ayıklamanın iyi bir yoluna sahiptir. Bunları ayrı bir sözlük olarak iletir. Bu değerler değişken olarak bilinir. Değişkenlerle çalışırken şu üç şeyi yapmamız gerekir:
- Sorgudaki statik değeri bir değişken adıyla değiştirin.
- Değişken adını GraphQL sorgusu tarafından kabul edilen değişkenlerden biri olarak bildirin.
- Aktarıma özgü değişkenler sözlüğündeki değeri iletin.
İşte her şeyin bir araya getirilmiş hali. İlk olarak, değişkeni tanımlayan sorgu:
query HeroNameAndFriends($episode: Episode) { hero(episode: $episode) { name friends { name } } }
Ardından, bununla birlikte gönderilen değişken değerlerinin ayrı sözlüğü:
{
"episode": "JEDI"
}
Sunucunun verdiği yanıt ise şu şekildedir:
{
"data": {
"hero": {
"name": "R2-D2",
"friends": [
{ "name": "Luke Skywalker" },
{ "name": "Han Solo" },
{ "name": "Leia Organa" }
]
}
}
}
Yukarıdaki GraphQL örneğinde görebileceğiniz gibi, yeni bir sorgu oluşturma ihtiyacının dışında basitçe farklı bir değişkeni aktardık.
Mutasyon Nedir?
Mutasyon, GraphQL'deki veri kümesini değiştirmenin bir yoludur. Veri deposundaki verileri değiştirir ve bir değer döndürür. Mutasyonlar veri eklemenize, güncellemenize veya silmenize yardımcı olur. Genel olarak mutasyonlar bir şema parçası olarak tanımlanır.
GraphQL mutasyonlarını tasarlarken dikkate alınması gereken noktalar
GraphQL tasarlarken önemli noktalar şunlardır:
- adlandırma: Öncelikle mutasyonlarınıza fiil adını vermelisiniz. Daha sonra isim veya varsa “nesne”. Mutasyonları adlandırırken camelCase'i kullanın.
- Özgüllük: Mümkün olduğunca mutasyona özel yapmalısınız. Mutasyonlar, kullanıcı tarafından gerçekleştirilen anlamsal eylemleri temsil etmelidir.
- Giriş nesnesi: İstemcide mutasyonu yürütmek için bağımsız değişken olarak tek, benzersiz, gerekli bir giriş nesnesi türü kullanın.
- Benzersiz yük türü: Her mutasyon için benzersiz bir yük türü kullanmalısınız. Ayrıca mutasyon çıktısını söz konusu veri yükü türüne bir alan olarak da ekleyebilirsiniz.
- Yuvalama: Mantıklı olan her yerde mutasyonunuz için iç içe yerleştirmeyi kullanın. GraphQL API'den tam olarak yararlanmanızı sağlar.
Sorgular veri okur, mutasyonlar ise veri yazar. Üçüncü bir işlem türü ise istemci hala bağlıyken değişen verileri kapsar.
GraphQL'de Abonelik Nedir?
A abone GraphQL spesifikasyonunda sorgu ve mutasyonun yanı sıra üçüncü işlem türüdür. Sorgu ve mutasyonun her biri tek bir istek ve yanıtla tamamlanır. Bunun yerine abonelik, genellikle WebSocket'ler üzerinden uzun süreli bir bağlantıyı açık tutar, böylece sunucu belirtilen bir olay her gerçekleştiğinde istemciye yeni bir sonuç gönderir.
Sözdizimi, sorgu yerine "abonelik" anahtar kelimesinin kullanıldığı bir sorguyu yansıtır:
subscription OnCommentAdded($postId: ID!) { commentAdded(postId: $postId) { id content author { name } } }
Abonelikleri pratikte birbirinden ayıran üç nokta vardır.
- Olay odaklı, sorgulamaya dayalı değil: İstemci bir kez ilgi gösterir. Sunucu eşleşen bir olay yayınlayana kadar başka hiçbir şey gönderilmez; bu, tekrarlanan sorgulamaya göre çok daha ucuzdur.
- Abonelik başına bir kök alan: Belirtilen özellik, bir sorgunun aynı anda birden fazla alan talep edebilmesinin aksine, yalnızca tek bir üst düzey alanın talep edilmesine izin verir.
- Küçük tutmak en iyisidir: Yalnızca arayüzün yenilenmesi gereken alanlara dokunun. Canlı sohbet, bildirimler ve fiyat göstergeleri tipik kullanım alanlarıdır.
GraphQL ve REST arasındaki fark
Aşağıdaki tablo, aralarındaki önemli farkı göstermektedir: GraphQL ve REST.
| GraphQL | DİNLENME |
|---|---|
| İstemci odaklı mimariyi takip eder. | Sunucu odaklı mimariyi takip eder. |
| GraphQL bir şemaya göre organize edilebilir. | REST uç noktalara göre düzenlenebilir. |
| GraphQL büyüyen bir topluluktur. | REST çok büyük bir topluluktur. |
| GraphQL'de geliştirme hızı hızlıdır. | REST'teki geliştirme hızı Yavaştır. |
| GraphQL'de öğrenme eğrisi diktir. | REST'teki öğrenme eğrisi orta düzeydedir. |
| Kimlik, onu nasıl getirdiğinizden farklıdır. | REST'te çağırdığınız uç nokta, belirli bir nesnenin kimliğidir. |
| GraphQL'de istemci, hangi alanları alacağını belirler. | Kaynağın şekli ve boyutu REST'teki sunucu tarafından belirlenir. |
| GraphQL tüm platformlarda yüksek tutarlılık sağlar. | Tüm platformlarda tutarlılık sağlamak zordur. |
GraphQL'in dezavantajları
GraphQL'in dezavantajları şunlardır:
- Genç ekosistem
- Arka uç kısmında kaynak eksikliği.
- Karmaşık bir uygulama için eksik tasarım deseni.
- Karmaşık sorgularda performans sorunları.
- Küçük uygulamalar için aşırıya kaçma
- GraphQL, istek içeriğinin saklanmasını sağlayan HTTP önbellekleme yöntemlerine bağlı değildir.
- GraphQL dosyaları anlamıyor. Dolayısıyla dosya yükleme özelliği dahil değildir.
- GraphQL ile Şema Tanım Dili öğrenmek gibi birçok geliştirme öncesi eğitim almaya hazır olun.
GraphQL tarafından kullanılan Açık Kaynak Uygulamalar ve Araçlar
GraphQL'in kullandığı önemli açık kaynaklı uygulamalar ve araçlar şunlardır:
- GatsbyGatsby, birden fazla GraphQL API kaynağından elde edilen verileri kullanabilen, GraphQL tarafından desteklenen bir uygulamadır. Statik ve istemci tabanlı React uygulamaları geliştirmek için kullanabilirsiniz.
- GraphiQL: Bu, tarayıcıyla entegre olan ve aynı zamanda GraphQL API'siyle etkileşim kuran bir IDE'dir. GraphQL'in içerdiği işlevlerden bazıları mutasyonlar, veri sorgulama ve otomatik tamamlama sorgularıdır.
- GraphQL Oyun Alanı: Bu, mutasyonları, doğrulamayı, GraphQL sorgularını, abonelikleri vb. yönetmek için yerleşik bir editöre sahip güçlü bir IDE'dir. Geliştirici, şemanın yapısını görselleştirmek için bu IDE'yi kullanabilir. Proje artık kullanımdan kaldırıldı ve özellikleri GraphiQL'e geri entegre edildi.
- Prisma: Prisma bir veritabanı yazılımıdır.tracArtık tür güvenli bir ORM olarak sunulan bu katman, CRUD (Oluşturma, Okuma, Güncelleme ve Silme) işlemlerini ortaya çıkarmak için yaygın olarak bir GraphQL sunucusuyla eşleştiriliyor.
- Bit: Yeniden kullanılabilir kodları bileşenlere dönüştüren açık kaynaklı bir araç ve platformdur. Geliştiriciler bunları çeşitli projeleri paylaşmak ve geliştirmek için kullanabilir.
