GraphQL ile .NET Core’da Veri Çekme: Ürün Listesi Örneği

Posted by

Merhaba arkadaşlar, bu yazıda sizlere .Net Core ile GraphQL API’sine istek atarak bir listeleme örneği yapacağız.

Günümüz yazılım projelerinde API’lerin kullanımı oldukça yaygınlaşmıştır. Bu API’ler sayesinde verileri etkili bir şekilde alıp kullanabiliriz. GraphQL, bu alanda esnekliği ve performansı ile ön plana çıkan bir API standardıdır. Bu yazıda, GraphQL kullanarak bir .NET Core uygulamasında ürün listesini çekeceğimiz bir örnek inceleyeceğiz.

Kodun Genel Yapısı

Aşağıdaki kod, GraphQL kullanarak bir API’den ürün listesini çekmek için hazırlanmıştır:

1. Model Sınıflarının Tanımlanması

public class Product
{
    [JsonPropertyName("id")]
    public string Id { get; set; }

    [JsonPropertyName("name")]
    public string? Name { get; set; }

    [JsonPropertyName("price")]
    public decimal Price { get; set; }

    [JsonPropertyName("description")]
    public string? Description { get; set; }
    
    [JsonPropertyName("category")]
    public string? Category { get; set; }

    [JsonPropertyName("stock")]
    public int Stock { get; set; }
}

public class ProductResponse<T>
{
    [JsonPropertyName("data")]
    public T Data { get; set; }
}

public class ProductsData
{
    [JsonPropertyName("products")]
    public List<Product> Products { get; set; }
}

Bu model sınıfları, GraphQL’den gelen JSON verisini deserialize (serileştirme) işlemi için yapılandırılmıştır. ProductResponse sınıfında da generic bir yapı kullanıyoruz, bir sonraki yazımızda da ürün ekleme işlemi gerçekleştirildikten sonra dönen veriyi de alacağız.

2. GraphQL Sorgusunun Gönderilmesi

async static void GetProducts(string apiUrl)
{
    string query = @"
            query {
                products {
                    id
                    name
                    price
                    description
                    category
                    stock
                }
            }";

    string jsonQuery = System.Text.Json.JsonSerializer.Serialize(new { query });

    using (var httpClient = new HttpClient())
    {
        try
        {
            var content = new StringContent(jsonQuery, Encoding.UTF8, "application/json");
            var response = await httpClient.PostAsync(apiUrl, content);

            if (response.IsSuccessStatusCode)
            {
                string responseString = await response.Content.ReadAsStringAsync();

                var productResponse = JsonSerializer.Deserialize<ProductResponse<ProductsData>>(responseString);
                if (productResponse != null)
                {
                    Console.WriteLine(productResponse.Data.Products.Count);
                }
                else
                {
                    Console.WriteLine("Products not found!");
                }
            }
            else
            {
                Console.WriteLine($"Hata: {response.StatusCode}");
                Console.WriteLine(await response.Content.ReadAsStringAsync());
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine($"Hata: {ex.Message}");
        }
    }
}

Bu metod, GraphQL sorgusunu bir HTTP POST isteği ile sunucuya gönderir. Gelen cevap JSON formatında deserialize edilir ve ürün listesi konsola yazdırılır.

string apiUrl = "http://localhost:4000/graphql";

GetProducts(apiUrl);

Console.Read();

Sonuç

Bu yazıda, GraphQL kullanarak bir API’den ürün bilgilerini çekmenin temel adımlarını öğrendik. Bu yapı, daha karmaşık uygulamalar için temel oluşturabilir. GraphQL’in esnek sorgu yapısı sayesinde, ihtiyacımız olan veriyi tam olarak çekebiliriz. Bu örneği geliştirerek farklı veri türleri ve sorgularla çalışabilirsiniz.

Leave a Reply

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir