Spring-boot ile GraphQL’ye Başlarken | tarafından Charith Rajitha | Tem, 2022

In: Genel


GraphQL Logosu

Alice, CarPark Şirketinde Proje Yöneticisidir ve Bob, Alice’in üzerinde çalıştığı ekipte bir Geliştiricidir. Alice yakın zamanda GraphQL hakkında birçok makale okudu ve CarPark Sunucuları için GraphQL kullanmanın fizibilitesini incelemesi gerekiyordu. Böylece Alice bu görevi Bob’a vermeye karar verdi. Alice’in gereksinimleri aşağıdaki gibidir,

  • Park edilmiş arabaların bir listesini alabilmeli
  • Araba park edebilmelidir
  • Bir araba park edildiğinde abone kullanıcıları bilgilendirebilmelidir.

Bunlar, Bob’un Alice’den aldığı temel kullanıcı hikayeleridir ve o, GraphQL özelliklerini keşfetmeye başlamıştır. [1] ve bu gereksinimlerin karşılanıp karşılanamayacağını kontrol etmek için öğreticiler. Bob, GraphQL spesifikasyonunu incelerken GraphQL’de 3 tip operasyon olduğunu ve bu operasyonlar kullanılarak yukarıdaki gereksinimlerin karşılanabileceğini buldu.

İşlem türleri aşağıdaki gibidir

  1. sorgu — salt okunur bir getirme.

— Bir Sorgu işlemi kullanılarak park edilmiş arabaların bir listesinin alınması sağlanabilir.

2. mutasyon — yazma ve ardından getirme.

— Bir Mutasyon işlemi kullanılarak bir araba park edilebilir.

3. abonelik — kaynak olaylara yanıt olarak veri getiren uzun süreli bir istek.

— Bir araba park edildiğinde abone kullanıcılara bildirimde bulunmak, bir abonelik işlemi kullanılarak gerçekleştirilebilir.

Bob, GraphQL ile CarParkServer’ın küçük bir gösterimini yapmaya karar verdi. Eğitimleri gözden geçirdiğinde, Spring boot’un GraphQL’yi desteklediğini gördü ve Spring boot ile bir GraphQL sunucusu oluşturmaya başladı.

graphql işlevlerini kullanmak için, aşağıdaki bağımlılık eklendi. pom.xml.

 <dependency>
<groupId>org.springframework.graphql</groupId>
<artifactId>spring-graphql</artifactId>
<version>1.0.1</version>
</dependency>

Ancak uygulamaya geçmeden önce, Bob, Sunucunun tüm işlevlerini içeren aşağıdaki GraphQL şemasını buldu ve bunu kaynaklar klasörünün içindeki graphql adlı yeni bir klasöre ekledi.

type Query {
getParkedCars: [Car]
}
type Mutation {
parkCar(id: ID, vehicleNumber: String, vehicleType: String): Car
}
type Subscription {
notifyCarPark: Car
}
type Car {
id: ID
vehicleNumber: String
vehicleType: String
}

Ardından Bob, Car.java sınıfını aşağıdaki gibi oluşturdu.

Bob, CarParkServer işlevlerini CarParkService.java sınıfında uyguladı.

Ardından, yukarıda belirtilen gereksinimleri desteklemek için son olarak CarParkController aşağıdaki gibi uygulandı.

@Controller
public class CarParkController {
private FluxSink<Car> carStream;
private ConnectableFlux<Car> carPublisher;
@PostConstruct
public void init() {
Flux<Car> publisher = Flux.create(emitter -> {
carStream = emitter;
});
carPublisher = publisher.publish();
carPublisher.connect();
}
@QueryMapping
public List<Car> getParkedCars() {
return CarParkService.getInstance().getParkedCars();
}
@MutationMapping
public Car parkCar(@Argument String id, @Argument String vehicleNumber, @Argument String vehicleType) {
Car car = new Car(id, vehicleNumber, vehicleType);
carStream.next(car);
return CarParkService.getInstance().parkCar(car);
}@SubscriptionMapping
public Publisher<Car> notifyCarPark() {
return carPublisher;
}
}

Şimdi gösteri zamanı,

Sunucu başlatıldıktan sonra Bob, dahili grafik GUI kullanarak veya postacı kullanarak GraphQL sorgularını kullanabilir.

Gösteri #1 : Park halindeki tüm arabaların listesini almak.

{
getParkedCars {
id
vehicleNumber
}
}
GraphQL’de sorgulama işlemi

Graphql’de sorgu ile hangi verilerin alınması gerektiğine karar verebiliriz. Yukarıdaki örnekte sunucu, park etmiş arabaların ID’sini ve araç numarasını döndürür, ancak sadece araç numarasına ihtiyacımız varsa, kimliği kaldırabilir ve aşağıdaki sorguyu kullanabiliriz.

{
getParkedCars {
vehicleNumber
}
}

Gösteri #2 : Bir araba park et.

mutation parkCar{
parkCar(id:”1", vehicleNumber:”AAA-5555”, vehicleType: “Mazda”) {
id
vehicleNumber
}
}
GraphQL’de Mutasyon İşlemi (CarParkServer’da Park A Car)

Gösteri #3 : Otoparklara abone olun.

Abone olma sorgusu yürütüldükten sonra istemci bir web soket bağlantısı ile sunucuya bağlanır ve verileri bekler.

subscription {
notifyCarPark{
vehicleNumber
}
}
GraphQL’de Abonelik İşlemi

yazlık

GraphQL resmi web sitesine göre,

GraphQL, API’ler için bir sorgu dili ve bu sorguları mevcut verilerinizle yerine getirmek için bir çalışma zamanıdır. GraphQL, API’nizdeki verilerin eksiksiz ve anlaşılır bir açıklamasını sağlar, müşterilere tam olarak neye ihtiyaç duyduklarını sorma gücü verir, daha fazlasını değil, API’lerin zaman içinde geliştirilmesini kolaylaştırır ve güçlü geliştirici araçları sağlar.

Bu çabada, temel bir anlayış elde etmek ve Java kullanarak bir uygulama yapmak için GraphQL’nin yeteneklerini araştırıyoruz. Bu blogla ilgili kaynak kodu burada bulunabilir.

Bu, GraphQL’i deneyen küçük bir kod parçasıdır, ancak GraphQL öğrenmek için iyi bir giriş noktası olacaktır.

[1] https://spec.graphql.org/Ekim2021/#



Bir cevap yazın

Ready to Grow Your Business?

We Serve our Clients’ Best Interests with the Best Marketing Solutions. Find out More

How Can We Help You?

Need to bounce off ideas for an upcoming project or digital campaign? Looking to transform your business with the implementation of full potential digital marketing?

For any career inquiries, please visit our careers page here.
[contact-form-7 404 "Bulunamadı"]