Asp.Net Core Api İle Graphql Projesi Oluşturmak
Bu yazı dizimiz de Asp.Net Core Api teması kullanarak graphql ile sql server veritabanina nasıl bağlantı kurabileceğimizi göreceğiz.
Kaynak Kodlara aşağıdaki repodan ulaşabilirsiniz.

Makalenin Amacı
.Net Core Web Api ve GraphQL kullanarak SQL Server veritabanında select işlemlerinin nasıl yapılacağını tecrübe edineceğiz.
Bilmeniz veya Öğrenmeniz Gereken Terimler
.Net Core Web Api Nedir?
.Net Core Web Api Projesi Nasıl Oluşturulur?
GraphQL Nedir?
ObjectGraphType Nedir?
Dapper Nedir?
SqlKata Nedir?
Kullanılan Yan Teknolojiler
Orm tool olarak Dapper altyapısı kullanılarak hızlı bir şekilde sql kodu yazabileceğimiz SqlKata Query Generater kütüphanesini kullanacağız.
SqlKata kütüphanesine https://sqlkata.com/ linki üzerinden erişebilirsiniz.
Dökümantasyon ve örnekler için https://sqlkata.com/docs adresini ziyaret etmenizi öneririm.
Katmanların Oluşturulması
Web Projesinin Oluşturulması
asp.net web api projesi oluşturuyoruz.

Web Projemize aşağıdaki kütüphaneleri ekliyoruz.
Entity Projesinin Oluşturulması
Tablo setlerimizi yöneteceğimiz Entity katmanını oluşturuyoruz.

Referans Projesi olarak aşağıdaki projeyi ekliyoruz.
Common Katmanının Oluşturulması
Tüm katmanlarda kullanacağımız enum, const ve helper sınıfları için Common katmanını oluşturuyoruz.

Projemize Newtonsoft.Json kütüphanesini ekliyoruz.
Business Katmanının Oluşturulması
İş süreçlerini kontrol edebileceğimiz Business katmanını oluşturuyoruz.

Model Katmanının Oluşturulması
Verilerimizi transfer edeceğimiz Model katmanını oluşturuyoruz.

Referans Projesi olarak aşağıdaki projeyi ekliyoruz.
Repository Katmanının Oluşturulması
Veritabanı işlemlerini yönetebildiğimiz data katmanımız olan Repository katmanını oluşturuyoruz.

Repository katmanına aşağıdaki referansları ekleyin.
Referans projesini olarak aşağıdaki kütüphaneleri ekliyoruz.
Common Layer
Extension Dosyalarının Oluşturulması
Array değişkenlerimize yardımcı olması için aşağıdaki extension'ı yazıyoruz.
Primitive değişkenlerimize yardımcı olmak için aşağıdaki extension'ı yazıyoruz.
Common Model Dosyalarının Oluşturulması
Kullanıcılardan parametrik olarak alacağımız veriler için base request sınıfı oluşturuyoruz.
GraphQL için aşağıdaki model dosyamızı oluşturuyoruz.
Entity Katmanı
Company Entity
Product Entity
Model Katmanı
Search Company Database Transfer Object
Kullanıcıdan aldığımız verileri alt katmanlara aşağıdaki veri deseniyle göndereceğiz.
Repository Katmanı
IRepositoryBase Interface Oluşturulması
Repository sınıflarımız için generic base bir Interface tanımlıyoruz.
RepositoryBase Sınıfının Oluşturulması
Oluşturacağımız Entity Repository'leri için RepositoryBase sınıfını, IRepositoryBase interface'i üzerinden oluşturuyoruz.
ICompanyRepository Interface Oluşturulması
CompanyRepository Sınıfının Oluşturulması
Business Katmanı
Company Entity'sinin iş süreçlerini yazmak için ICompanyService adında bir interface oluşturuyoruz.
Şimdilik iki tane metod yazacağız.
ICompanyService Oluşturulması
CompanyService Sınıfının Oluşturulması
ICompanyService üzerinden CompanyService adında yeni bir sınıf oluşturuyoruz.
Web - Graphql Katmanı
GraphQL Schema adını verdiğimiz referans bir root sınıfından oluşur.
Schema sınıfına Resolver bir tane QUERY referans gösterilir..
Query dosyaları ise GraphType'lardan beslenerek dinamik sorgular oluşturacağımız bir yapı kurmamızı sağlar.
Kısacası Schema > Query > GraphTypes olarak tanımlayabiliriz.
Retail adında bir tane Root Schema sınıfımızı aşağıdaki gibi tanımlıyoruz.
RetailSchema sınıfının TutorialQuery adında bir sorgulama sınıfını çözümlediğini bildiriyoruz.
Schema Sınıfının Oluşturulması
Company Graph Type Sınıfının Oluşturulması
Entity sınıflarımızın field alanlarını kullanarak graphql için sorgulanabilir tipler oluşturuyoruz.
Aşağıdaki örneğimizde Company Entity dosyasımızı referans göstermiş ve field alanları için Type tanımlamalarını yapmış olduğumuzu göreceksiniz.
Örneğin Name alanı için ikinci parametre olan IsNullable alanını True vererek, bu field için null alabilen bir field düzenlemiş olduk. Diğer override parametrelerini kullanarak TYPE tipinide değiştirmeniz veya belirtmeniz mümkündür.
TutorialQuery Sınıfının Oluşturulması
Bu örneğimizde 2 tane sorgulama endpoint'i oluşturacağız.
Birinci endpoint; "company" adını verdiğimiz, CompanyGraphType kullanarak sorgu yapabileceğimiz,
companyId
companyName
isActive
parametrelerinden oluşan ve return type değeri COMPANY entity sınıfımızdır.
İkinci endpoint; "companies" adını verdiğimiz ve return tipi List<Company> olan sınıfımızdır.
Build & Run & Test
Create Database
Öncelikle yeni bir SQL SERVER veritabanı açmalısınız.
Sonrasında database klasörü içerisinde yer alan create-table.sql dosyasını çalıştırmalısınız.
Sizlerin projeyi test edebilmesi için; database klasörünün içerisinde yer alan bulk-data.sql dosyasını oluşturdum, bu dosyayı çalıştırabilirsiniz.
Projenin AppSettings dosyasını kendi connectionString değerlerinize göre güncellemesiniz.
DotNet Restore & Build & Run
Aşağıdaki komutları çalıştırıp projeyi ayağa kaldırabilirsiniz.
UI PlayGround
Tarayıcınızdan https://localhost:5001/ui/playground adresine gitmek istediğinizde; sorgularınızı test edebileceğiniz bir arayüze erişebilmeniz gerekmektedir.

Hello GraphQL For .Net
Aşağıdaki sorguyu yazdığınızda çıktısını almalısınız.

Last updated
Was this helpful?