Domain Graph Service Framework with Spring Boot

Abdulkerim Karaman
alBarakaTech Global
3 min readFeb 6, 2021

GraphQL 2015 yılında open source olarak sunulan, istemci seviyesinde bir sorgulama dilidir. Daha önce ki yazılarımızda GraphQL ’den detaylıca bahsederek örnekler yapmıştık.

Günümüzde bir çok dil ve framework ’ün GraphQL ’i destekleyecek client provider ’ı mevcut.

Kaynak: https://netflix.github.io/

Bugün sizlere Netflix Teknoloji ekibinin geliştirdiği ve geçtiğimiz hafta open source olarak paylaştığı Dgs Framework (Domain Graph Service Framework) den bir örnek ile bahsetmek istiyorum. Örneğimize geçmeden önce Dgs Framework ‘ün Spring Boot tarafında sağladığı bazı kolaylıklar şunlardır:

  • Spring Boot üzerinde Annotation tabanlı programlama imkanı
  • Unit test için sorgu desteği
  • Gradle Code Generation plugin ile kod oluşturma.
  • Spring Security ile Entegrasyon
  • GraphQL abonelikleri (WebSockets ve SSE)
  • Dosya yüklemeleri
  • Hata yönetimi

Örneğimiz için https://start.spring.io/ adresine girerek yeni bir proje oluşturalım.

build.gradle dosyasını açarak aşağıdaki bağımlılıkları projemize dahil edelim.

implementation 'com.netflix.graphql.dgs:graphql-dgs-spring-boot-starter:3.2.0'
implementation 'com.apollographql.federation:federation-graphql-java-support:0.6.1'

Ayrıca plugin içine aşağıdaki plugini ekleyelim.

id "com.netflix.dgs.codegen" version "4.0.10

Bu plugin yardımı ile graphql schema ‘mızı kullanarak client code generate edeceğiz.

src/main/resources/schema/schema.graphqls dizinine schema ’mızı oluşturalım.

type Query {
persons(name: String): [Person]
}

type Person {
name: String
surname: String
country: String
city: String
birthYear: Int
}

Ardından projemize iki tane class ekleyeceğiz.

Person.java

public class Person {
private final String name;
private final String surname;
private final String country;
private final String city;
private final int birthYear;

public Person(String name, String surname, String country, String city, int birthYear) {
this.name = name;
this.surname = surname;
this.country = country;
this.city = city;
this.birthYear = birthYear;
}

public String getName() {
return name;
}

public String getSurname() {
return surname;
}

public String getCountry() {
return country;
}

public String getCity() {
return city;
}

public int getBirthyear() {
return birthYear;
}
}

PersonDataFetcher.java

PersonDataFetcher için eklediğimiz personList listesini herhangi bir data source ile doldurabiliriz. (database, api, file v.s.)

Tanımladığımız PersonDataFetcher class’ı içine persons methodunu ekliyoruz. (Bu methodumuz DgsData annotation’a sahip olmalı.) Bu methodumuz geriye person List dönecek. Ayrıca ilgili class ’ın en üst kısmına DgsComponent annotation eklemeyi unutmayalım.

Spring Boot üzerine Dgs Framework kullanarak bir GraphQL method’u oluşturmak bu kadar basit :)

Şimdi gelin uygulamamızı çalıştıralım. (http://localhost:8080)

Uygulamamızı çalıştırdığımızda bizi GraphiGL arayüzü karşılıyor. Bu arayüz üzerinden örnek query’ler oluşturarak yazmış olduğumuz methodları test edebiliriz.

Bir sonraki yazımızda görüşmek dileğiyle :)

--

--