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

Aşağıdaki terimler hakkında bilgi sahibi olmalısınız.

  1. .Net Core Web Api Nedir?

  2. .Net Core Web Api Projesi Nasıl Oluşturulur?

  3. GraphQL Nedir?

  4. ObjectGraphType Nedir?

  5. Dapper Nedir?

  6. 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?