BasicGraphQL · GraphQL ile Kitap Kataloğu Örneği
Hot Chocolate ile C# Query/Mutation tiplerinden GraphQL şeması üreten; sahte kitap verisi, alan seçimi ve Voyager keşfi sunan API örneği.
BasicGraphQL, aynı kitap kataloğunun liste ve detay ekranlarına farklı alanlarla nasıl yanıt verebildiğini gösteren bir ASP.NET Core 8 örneği. Hot Chocolate, C# sınıflarından GraphQL şemasını oluşturuyor ve istemci isteklerini /graphql adresinde karşılıyor. Örneğin odağında üç işlem var. Kitapları listelemek, kimliği bilinen bir kitabı okumak ve kataloğa kitap eklemek.
Liste ve detay ekranı aynı veriyi nasıl kullanır?
Bir okuma listesi uygulamasında kitap kartı için id, title ve author alanları yeterli olabilir. Detay ekranı aynı modelden genre, year ve isTurkish alanlarını da seçebilir. GraphQL isteği bu alanları kendi seçim kümesinde belirtiyor. İki ekran aynı uç noktaya istek gönderiyor ve yanıtın alanlarını ekranın ihtiyacına göre belirliyor.
Uygulama katmanındaki Query.GetBooks metodu örnek kitap listesini döndürüyor. Query.GetBookById ise gelen kimliği listedeki kayıtlarla karşılaştırıyor ve eşleşme yoksa null döndürüyor. Örneğin başlangıç listesindeki 6 numaralı kayıt Sabahattin Ali’nin Kürk Mantolu Madonna kitabı. Bu kaydı önce yalnızca başlığıyla, ardından yazar ve yayın yılıyla istemek, seçim kümesinin yanıtı nasıl değiştirdiğini görmek için kısa bir deneme sunuyor.
Kitap ekleme ve bellek içi veri
Mutation.AddBook başlık ve yazarı parametre olarak alıyor. Bu iki alanla oluşturulan Book nesnesi, FakeDbContext içinde listenin en büyük kimliğine bir eklenerek kaydediliyor. İstemci ekleme yanıtında, örneğin yeni kitabın id ve title alanlarını seçip arayüzde oluşturulan kaydı gösterebilir. Tür, yayın yılı ve Türkçe olma bilgisi Book modelinde yer alıyor. Bu alanların değerlerini girişte belirlemek, mevcut ekleme işleminin kapsamı dışında.
Başlangıçtaki kitaplar doğrudan kodda tanımlı ve eklenen kayıtlar uygulamanın belleğinde tutuluyor. Uygulama yeniden başladığında örnek katalog başlangıç değerlerine dönüyor. Bu kurgu, veritabanı bağlantısı hazırlamadan sorgu ve mutasyon davranışını incelemeyi sağlıyor.
Şemayı kod ve istek üzerinden incelemek
Domain katmanı Book modelini, Infrastructure örnek veriyi, Application sorgu ve mutasyon sınıflarını barındırıyor. API projesi bu sınıfları Hot Chocolate’a tanıtıyor. /graphql-voyager adresindeki Voyager arayüzü, şemada hangi tiplerin ve alanların bulunduğunu görselleştirmek için yapılandırılmış.
Bir isteği Postman ya da benzer bir HTTP istemcisiyle gönderirken GraphQL sorgusu JSON gövdesindeki query alanında taşınıyor. Aynı kitap için iki farklı alan seçimi gönderip yanıtları yan yana okumak, şemadaki bir alanın C# modelinden istemcinin ekranına nasıl ulaştığını somutlaştırıyor. Ekleme işleminin ardından liste sorgusunu tekrar çalıştırmak ise okuma ve yazma işlemlerinin aynı bellek içi veri kaynağını kullandığını gösteriyor.