Android Uygulama Geliştirirken GraphQL Kullanımı (Apollo İle)

Hüseyin Serkan Özaydin
4 min readJan 19, 2021

Merhabalar, bugün ki yazımda GraphQL gibi bir sorgu dilini nasıl Android uygulamalarımıza entegre edeceğimizden bahsedeceğim.

GraphQL Nedir?

GraphQL, sunucudan veri çekmeye farklı bir yaklaşım getirmiş bir standarttır. Şöyle bahsedelim; şimdi listeleme ekranınız var ve bu ekranda sadece bir görsel linkine, bir kullanıcı adı textine ihtiyacınız var. Bunu Rest mimari ile yaparsanız backend developer sadece istedikleriniz için bir DTO oluşturmak zorunda yada DAO’nun hepsini dönmeli. Sürekli değişen businesslarınız var ise backendin sürekli DTO’yu güncellemesi gerekecek. GraphQL bunun önüne geçmek için ortaya konulmuş bir standarttır.

Başka bir avantajı ise şudur; Mesela bir kategori detaydaki görseli alacaksınız. Bunu REST ile yaptığınız zaman sorgularınız şöyle olacak;
- Kategorileri çek
- Kategori detayı çek

Ne oldu? 2 tane request attınız ama GraphQL ile tek requestte bu bilgiyi alabilirsiniz. Tek avantajları bu değil başka avantajlarıda var ve GraphQL’i anlatan çok fazla kaynak var. Araştırmanız dahilinde mantığını daha iyi anlayacaksınız. Daha fazla detaya girebilirim ama bu yazıya gelen arkadaşlar zaten GraphQL’in ne olduğunu bilip nasıl implemente edileceğini öğrenmek için geliyor olacak. Ama bir özet geçeceksek Rest ile GraphQL arasındaki farka aşağıdaki görsel oldukça açıklayıcı.

GraphQL’i Android’te Nasıl Kullanabiliriz?

Bunun için farklı çözümler var. Çünkü GrahQL’de diğer mimariler gibi HTTP ile çalışıyor. Retrofit’te arkada OkHttp’yi kullandığı için Retrofit’ide kullanabilirsiniz. Ama tavsiye etmiyorum

GraphQL İçin Retrofit’i Neden Kullanmamalıyız?

Benim için 2 adet önemli sebebi bulunmakta. Bunlar;

  • Retrofit genellikle REST servisler için oluşturulmuş bir yapı
  • GraphQL için genel olarak kullanılan bir kütüphane değil bu yüzden bir sorun yaşadığınızda hemen çözüm bulamayabilirsiniz

Apollo

Eğer Google’ye “GraphQL” yazarsanız ilk sayfada bu frameworkü görüyor olacaksınız.

Apollo’nun birçok platformda bulunan kütüphaneleri var. Bundan dolayı GraphQL kullanılacaksa Android veya IOS tarafında bence Apollo entegrasyonu gerekmekte.

Apollo’yu Nasıl Entegre Edebiliriz?

Çok basit bir dökümanı bulunmakta;

Eğer yukarıdaki link kafa karıştırıyorsa aşağıda adım adım nasıl implement edileceğini anlatıyor olacağım oradan da takip edebilirsiniz.

Not: Coroutine ile Apollo’yu çalıştıracağız. Aşağıdaki dökümanı buna göre takip ediniz!!! en sonunda ise Apollo’nun örnek projesini paylaşıyor olacağım. Örnek GraphQL sunucusu olarak https://apollo-fullstack-tutorial.herokuapp.com/graphql adresini kullanmaktayım.

1. Adım — Proje Gradle’sinde bulunan dependencies alanına aşağıdaki plugini ekleyin;

2. Adım — App Gradle’sinin en üstünde Apollo plugini enable edin

3. Adım — Apollo’yu projenize bağımlılık olarak

Artık projemize Apollo’yu eklediğimize göre biraz daha derine inelim.

4. Adım — OkHttp’yi Apollo’ya ekleyelim

5.Adım — Query veya Mutationsları Projemize ekleyelim

Bu adımı yapmak için ilk önce birkaç adımı gerçekleştirmeniz gerekmekte. Şimdi GraphQL server schemalardan generate edilir ve bu schemada belli bir standarta göre oluşur. Bizim bu standartı uygulamaya eklememiz gerekmekte. Bunun için az önce Apollo pluginini projemize eklemiştik. Biz sadece GraphQL sunucusunun endpointini vereceğiz ve bu schema bizim için projeye indirilecek. Bunun için projenizde “src/main/graphql/com/example/” şeklinde bir klasör açabilirsiniz az önce örnek olarak verdiğim klasör pathini istediğiniz şekilde belirleyebilirsiniz.

Dosya yolunu oluşturduğunuza göre artık schema.json dosyasını bu dosya yoluan indirebilirsiniz. Bunun için terminali açıp aşağıdaki komutu run edin.

Not: Eğer GraphQL sunucunuz yok ise Apollo’nun örnek için oluşturduğu sunucuyu kullanabilirsiniz. https://apollo-fullstack-tutorial.herokuapp.com/graphql.

Schema.json dosyasını indirdiğimize göre artık Query ve mutationsları yazabiliriz. Burası benim en çok hoşuma giden kısım.

Eğer bir GraphQL sunucunuz var ise otomatik query veya mutationsları görebileceğiniz bir döküman oluşuyor olacaktır. Size örnek olarak verdiğim GraphQL linkine tıklarsanız böyle bir alanın olduğunu göreceksiniz.

Şimdi biz bu dökümanda birçok Query görüyoruz ben bu querylerden Login’i kullanacağım. Bunu Android tarafında denemeden önce siteden queryi gönderince sağ taraftaki sonucu alacağımı görüyorum. Şimdi Android tarafında nasıl oluyor bakalım.

Az önce oluşturduğunuz dosya yoluna “Login.graphql” adında bir dosya ekleyin ve içine şu kodları yazın;

Bunu yazdıktan sonra projenizi build edin çünkü Apollo sizin için bu yazdığınız Mutation için arkada kod generate edecek. Build ettikten sonra Apollo sizin için şöyle bir kod generate etmiş olacak (Burası pek önemli değil ama bilgi olarak paylaşıyorum)

Eğer sınıfa biraz detaylı bakarsanız Apollo sizin için gönderilecek parametreleri ve request sonucunda dönecek responseyide oluşturduğunu göreceksiniz. Sanki SOAP kullanıyorsunuz gibi düşünün.

6.Adım — Requestimizi atalım

Gelen cevabı istediğiniz şekilde kullanabilirsiniz. Apollo RxJava’yı dda destekliyor. Oldukça iyi bir kütüphane. Kendi projelerimizde de kullanıyoruz.

Apollo örnek Android projesi;

Apollo implement etme videosu;

Genel olarak GraphQL’i anlattık Apollo’yu anlattık ve birkaç detay konusuna değindiğimize göre bu yazıyıda burada bitirelim :)

--

--