.Net Core Web Api ile GraphQL Kullanımı-1

Hakan Topuz
3 min readNov 8, 2020

--

Merhabalar,

Bu yazımda .Net Core Web Api projesi üzerinde graphql kullanımından bahsedeceğim.Öncelikle “Graphql” nedir diyecek olursak; Graphql; facebook tarafından geliştirilen, “veri sorgulama ve erişimini” client tarafına bırakarak daha hızlı ve etkili bir development imkanı sunan bir araçtır.

Yapmış olduğu şey; veri erişimi ve modelleme işinin uygulama(client) tarafında yapılabilmesini sağlamaktır.

Örnek bir durumla açıklayacak olursak; bir mobil uygulama için webservis geliştiriyoruz.Uygulamada yer alan bir ekranda örneğin ürün nesnesinin sadece adına ve fiyatına ihtiyacımız var.Bir başka ekranda ise ürüne ait bütün bilgilere, resimleri vs. dahil ihtiyacımız olacağını düşünelim.

Bu iki isteği karşılamak için bir metot yazacak olsaydık, ürüne ait bütün bilgileri her istekte döner, ihtiyacımız olanları ekranda gösterirdik.Bu da gereksiz yere server maliyet oluştururdu.Bu iki istek için iki ayrı metot yazacak olsaydık o da apayrı bir maliyet anlamına gelir.Graphql sayesinde modelleme işini client tarafta yaparak, servise ihtiyacımız olan data modeli verip, o modele uygun veriyi alabiliriz.

Graphql kullanımını gördüğünüzde demek istediğimi daha iyi anlayacaksınız.Haydi başlayalım..

Öncelikle .Net Core Web Api projesi oluşturuyoruz.Daha sonra Nuget’ten GraphQL i projemize dahil ediyoruz.

Database olarak yine Northwind database’ini kullanacağım.

Öncelikle projemizin Model ve Data katmanlarını oluşturuyoruz.Bu projede sadece Categories,Products ve Customers tablolarını kullanacağım.Bu tablolar için entity sınıflarını oluşturuyoruz.

Daha sonra bu entity nesneleri için Dbcontext ve Repository sınıflarımızı oluşturuyoruz.Data katmanı için ORM olarak EntityFrameworkCore kullandım.

Daha sonra bu kullanacağımız entity nesnelerinin, graphql tarafında hangi propertyleri barındıracağını belirttiğimiz GraphType nesnelerini oluşturuyoruz.Bunu şu şekilde düşünebiliriz ki, entity de var olan her property’yi api tarafında response olarak dönmeyebiliriz.Seçmiş olduğum propertyler rastgele seçilmiştir örnek amaçlı.

Şimdi Graphql terimlerinden Schema ve Query’yi açıklayalım.

  • Schema: Hangi queryi kullanacağımızı, varsa mutationlarımızın tanımlandığımız yerdir.(Mutationlara bir sonraki yazıda değinmeyi düşünüyorum.)
  • Query: Graphql queryleri için endpointlerimizi tanımladığımız yerdir.
  • GraphqlQuery: Client tarafında gelen isteğin parametlerini belirttiğimiz sınıftır.

Şimdilik yalnızca Query kullanımına bakacağız.Bir sonraki yazımda mutation işlemlerine değineceğim.

Field<> olarak belirttiğimiz her bir alan aslında route tanımını ifade etmektedir.

Arguments kısmında, varsa alacağı parametreleri tanımlıyoruz.

Resolve kısmında ise bu endpoint’e response sağlayacak metodu belirtiyoruz.

GraphqlQuery sınıfımızı controller’da client tarafından input olarak alacağız.

Controller sınıfımız ise constructor’ında parametre olarak ISchema ve IDocumentExecuter sınıflarını alıyor.Bunların implementasyonlarını Startup.cs tarafında tanımlayacağız.

ISchema sınıfının implementasyonunu biz yazdık.(NRHSchema sınıfı)

IDocumentExecuter implementasyonu olarak ise GraphQL’in DocumentExecuter sınıfını kullanacağız.Bu sınıf graphql querylerini çalıştıran sınıftır.

GraphqlQuery parametresini isteğin body’sinden alıyoruz.Metodumuz HttpPost metodudur.

Startup.cs sınıfımızın ConfigureServices metodunda ise şu şekilde tanımlamalarımızı yapıyoruz.

Şimdi örnek bir istek yapalım.İstek için postman uygulamasını kullanacağım.

“Product” endpoint’i için örnek bir istek bu şekilde yapılmaktadır.Buraya istek kısmında json olarak query’yi gönderiyoruz.Query içerisinde almak istenen değerlerin(procuctID,productName) mutlaka ObjectGraphType sınıflarında tanımlı olması gerekmektedir.Tek başına model sınıfında var olması yeterli değildir.Bunu belirtmek isterim.

“randomCustomer ” endpoint’i için ise bu şekilde istek atıyoruz.Bu arada almak istediğimiz değerleri camelCase olarak yazmamız gerekiyor.

Aynı istekte birden fazla endpoint’e istek atmakta mümkün.O da şu şekilde;

Son olarak bu örnek projenin kaynak kodlarına https://github.com/hakanntopuzz/GraphQLSample buradan ulaşabilirsiniz.Mutation işlemlerine de yine bu proje üzerinden devam edeceğim.

Bir sonraki yazıda görüşmek üzere.Hepinize mutlu kodlamalar.

--

--