Java SpringBoot GraphQL Kullanımı

Mustafa Enes Tepe
4 min readMar 17, 2022

--

Bu yazı içerisinde Java SpringBoot’da Graphql’e göz atacağız. Öncelikle Intellij Idea kullanan kişiler Graphql intellisense desteği için şu adımları gerçekleştirebilir. Gerçekleştirmediğinizde graphqls uzantısını intellij tanımıyor. Sol üst taraftan File> Settings > Editor > File Types kısmına geliyoruz ve daha sonra gelen bölümden GraphQL kısmını buluyoruz. Hemen sonrasında ise file name patterns kısmındaki + butonuna tıklayıp *.graphqls yazılp apply diyoruz. Bunu yaptığımızda IDE’miz graphqls uzantılı dosyaların da graphql dosyaları olduğunu algılamış oluyor. Bu durumda IDE’nizi tekrar başlatmanızı isteyebilir, değişikliklerin yerine getirilmesini sağlamak için kabul ediniz.

Sonrasında ise SpringBoot uygulamamız oluşturuyor ve gerekli bağımlılıkları ekliyoruz.

Bağımlılıkları buradan görebileceğiniz gibi aynı zamanda da github adresime gidip oradan direkt kopyalayabilirsiniz ya da Maven üzerinden aratarak ekleyebilirsiniz.

Proje Linki= https://github.com/MET-DEV/E-Commerce-Backend

Proje içerisinde benim kullandığım tüm bağımlılıkları kullanmak zorunda değilsiniz isterseniz, farklı bir veritabanı sürücüsünün bağımlılığını ekleyebilir ve onu kullanabilirsiniz.

application.properties dosyamızda ise gerekli konfigürasyonlar bulunmakta. Buradan istediğiniz konfigürasyonu kendinize göre ayarlayabilirsiniz.

İsterseniz öncelikle bir model directory’si daha sonrasında da bunun içerisinde bir Product class’ı oluşturalım.

Daha sonrasında ise Product class’ımızın içerisine gerekli özellikleri veriyoruz. Yine benim verdiğim özellikler yerine siz farklı özellikler verebilirsiniz.

Burada gerekli annotation’ları ekledim. Data, AllArgsConstructor ve NoArgsConstructor lombok bağımlılığından geliyor. Sizler isterseniz bir boş yapıcı blok, bir tüm özellikleri alan yapıcı blok ve bir de getter, setter’ları elinizle yazabilirsiniz.

Daha sonra ise repository isminde yeni directory açıyor içerisine ise ProductRepository (İsmini belli başlı kurallara uyarak, istediğiniz gibi verebilirsiniz) isminde yeni bir interface ekliyoruz.

Sonrasında bu interface’imizi data-jpa bağımlılığımızın içerisinden gelen JpaReposity interface’i ile extend ederek temel veritabanı işlemlerimizi (CRUD) buraya da aktarmış oluyoruz.

Api isimli bir directory oluşturuyor, içerisine ise mutation ve query isimli iki directory ekliyoruz. Query içerisine veri çekme işlemlerimizi yazacağız. Mutation içine ise veri ekleme değiştirme, silme gibi işlemleri içeren class’ları ekleyeceğiz. Öncelikle mutation directory içerisine ProductMutationResolver class’ımızı oluşturalım.

Class’ımızın üzerine Component annotation’ı ekliyor ve daha sonrasında bunu GraphQLMutationResolver interface’inden implemente ediyoruz. Daha sonrasında Create işlemi için ProductRepository interface’imizi çağırıyor ve constructor injection ile içeride set ediyoruz. Daha sonra ise doldurulması için Autowired kullanıyoruz. Sonrasında saveProduct metodumuzu yazıyor ve kayıt sonrası dönen product’ı geri dönderiyoruz. (Create işemimizi Mutation’da yaptık! Tekrar mini hatırlatma)

Şimdi de ProductQueryResolver class’ımızı oluşturup GraphQLQueryResolver interface’inden implemente ediyoruz. Component annotation’umuzu unutmuyoruz. ProductRepository’yi oluşturuyor ve constructor injection ile projemize dahil ediyor ve sonradan doldurulması için Autowired’ı ekliyoruz üstüne. getProducts (Yani tüm ürünleri getirme) ve getProductById (Ürünün id’sine göre getirime) metotlarımızı yazıyoruz.

Aslında temel olarak projemiz bitti sayılır. Şimdi product.graphqls dosyamızı ekliyoruz.

Öncelikle resources altına graphql, onun içine de product.graphqls dosyamızı ekliyoruz.

Burada ise type ve input’larımızı oluşturuyoruz. Inputları dışarıdan aldığımız değerler. Type’ları ise dışarıya verdiğimiz veriler olarak düşünebiliriz. Query kısmında öncelikle metot ismimizi, sonra var ise parantez içine metot içindeki parametreyi, daha sonra ise dönüş tipini yazıyoruz.(Dönüş tipi eğer köşeli parantez içinde ise dizi gibi düşünebilirsiniz.)

Mutation kısmına ise saveProduct (varsa diğer mutation metotlarımızı) metodumuzu yazıyoruz.

Veeee artık çalıştırma zamanı

İlk sorgumuzu yazıyoruz. Bunun için öncelikle query olduğunu belirtiyor ve süslü parantezlerimizi ekleyip, içerisine metot ismimizi yazarak süslü parantezlerimizi ekleyip, bize dönmesini istediğimiz özelliklerin ismlerini yazıyoruz. Sonrasında ise play tuşu gibi görünen tuşa tıklıyoruz vee ürünlerimiz geliyor.

Şimdi ise mutation işlemimizi test edelim. Öncelikle mutation olmasını belirtmek için mutation yazıyor ve süslü parantezlerimizi açıyoruz. Sonra metot ismimizi yazıyor ve normal parantezleri açıp içine, parametremizin adını sonra iki nokta ile süslü parantez açıp oluşturmak istediğimiz özellikleri içine veriyoruz veriyoruz. Metodun parantezinin sonuna ise bize dönen product’tan istediğimiz özellikleri yazacağımız bir süslü parantezi açıyor, sonrasında ise içerisine bu özellikleri ekliyoruz. Play tuşuna benzeyen tuşa :D, basarak çalıştırıyor ve sağda sonucu görüyoruz.

Eğer video izlemek isterseniz güzel videolar bence:

--

--