GraphQL – Hızlı Başlangıç

Bu yazıyı okuduğunuza göre siz de benim gibi GraphQL’i merak edip, öğrenmeye çalışıyorsunuz demektir. Bu yazıda Github’ın sunduğu GraphQL API’ı üzerinden hızlı bir tanışma yapmayı planlıyorum. Yapacağım işlemler Github API’ına istekler göndermekten ibaret olacak ama genel olarak  GraphQL’i tanımak açısından faydalı olacağını düşünüyorum. Başka bir zamanda da Django ile kendi GraphQL API servisimi oluşturmayı deneyeceğim.

Kısaca bahsetmek gerekirse GraphQL, Facebook tarafından 2012 yılında mobil uygulamalarında veri alışverişini kolaylaştırmak için oluşturulmuş bir  “query language”.  Yani dil bağımsız olarak kendi graph servislerimizi yazabiliriz. 2015 yılında ise proje açık kaynak olarak paylaşıldı. Şu anda kullananlar arasında Github, Shopify, Coursera, Pinterest var.

Fazla uzatmadan GitHub GraphQL API’yı kullanamaya başlayalım. Giriş yaptıktan sonra ilk örnek sorgumuz bizim için hazırlanmış durumda zaten;

Hello there!

“Execute Query”, “oynat” simgesine sahip butona, tıkladığım zaman aldığım dönen sonuç şu şekilde;

Burada yaptığımız basit bir sorgu oluşturmaktı. Bir sorgu oluşturduğumuz zaman objelerin sahip olduğu alanların değerini almış oluyoruz. viewer giriş yapmış kullanıcıyı temsil ediyor, anlayacağınız gibi…

Bir de sorgumuzu şu şekilde yapalım;

Sorgu ve dönen sonuç aynı şekilde. GraphQL’in en büyük artılarından birisi de bu. Hangi verilere ihtiyacımız varsa, sadece onları isteyip, sorguyla aynı formatta alıyoruz.

Argüman Gönderme

Bazı alanlar için sorgu yazarken argüman göndermemiz gerekebilir. Argümanları parantezler içinde gönderiyoruz. Bilmemiz gereken en önemli nokta, çift tırnağın zorunlu olması. yani login: "github" yerine login: 'github' hata verecektir.

Bazı alanlar için argüman göndermek zorunlu. Mesela repository için name ve owner için argüman geçmek gerek.

Doğru sorgu için name ve owner gerekli;

Aliases ve Fragments

Alias

Aynı alan için farklı argümanlarla sorgu yapmamız gerekirse, “alias” kullanmamız gerek. Demek istediğimi daha iyi anlatmak için şu sorguyu çalıştırmayı deneyelim;

repository için farklı argümanlarla sorgu yapmayı denedik ama “argument conflict” hatası aldık. Bu hatanın önüne geçmek için sorgumuzu şu şekilde düzeltebiliriz;

Fragment

Yukarıdaki sorgulardakiid, createdAt, description gibi tekrar tekrar aynı alanların değerini almak istediğimizde, “fragment” tanımlayıp kullanabiliriz.

Connections

Şu ana kadar yaptığımız sorguların sonucunda hiç liste olarak sonuç gelmedi. 1’den çoğa ilişkisi olan bir senaryoda, bir albümün birden fazla şarkıya sahip olması gibi, “connection” devreye giriyor. GitHub GraphQL API üzerinden sahip olduğumuz repoları listeleyen sorguya bakarsak aslında çok basit bir şeyden bahsettiğimi anlarız;

Sorgu sonuçlarının görüntülendiği pencerenin sağ üstündeki “Docs”a tıklayıp,  repositories‘e bakarsak RepositoryConnection tipinde olduğunu görürüz. Sırayla edges ve node alanlarının detayına bakarsak her bir node aslında Repositorytipinde olduğunu görürüz.

Bu vesileyle de GraphQL ile iç içe sorgular yapmanın aslında ne kadar basit olduğunu görmüş olduk.

Değişken Tanımlama

Şu ana kadar yaptığımız sorgularda değişkenlerden faydalanmadık. GitHub GraphQL API’da sorguları yazdığımız pencerenin hemen altında “Query Variables” isminde başka bir pencere var. Şimdi hem sorgumuza bir isim verelim hem de bu sorgumuza argüman geçerken değişkenleri kullanalım;

Mutation

Belki çoktan aklınıza şu soru gelmiştir: “Hep data almak için mi sorgu yapıyoruz? Datalar üzerinde değişikleri nasıl yapabiliriz?”. Sorunun cevabı mutation “keyword”‘ünde saklı. GitHub GraphQL API kullandığımız için, Github’ın bize sunduğu mutationlarından üzerinden sorgumuzu yapacağız.  Yapmaya çalışacağımız şey, yeni yorum eklemek. Önce test için yeni bir repo oluşturalım ve issue ekleyelim.

Şu sorgu ile de açtığımız son repoyu ve “issue”ları listeleyelim. Issueların id bilgisi(subjectId) gerekli olacak.

Şimdi de gelelim mutationoluşturmaya;

Burada subjectIddışındaki değerleri biz belirledik. “Query Variables” kısmında göndereceğimiz obje için “Docs > addComment > AddCommentInput”  bölümüne bakabilirsiniz. Sorgu sonucu dönecek cevap AddCommentPayloadtipinde olacak ve yine “Docs” kısmından hangi alanları kullanabileceğimizi görebilirsiniz.

Bye!

Çok kısa da olsa GraphQL ile tanışmış olduk ve sadece ufak bir kısmını denedik. graphql.org/code adresinde göreceğiz gibi bir çok dilde kendi servisimizi yazmamız mümkün ve GraphQL hakkında öğreneceğimiz çok şey bizi bekliyor.

Bir Cevap Yazın