Altbilgi içeriğine atla
.NET YARDıM

GraphQL C# (Geliştiriciler için Nasıl Çalışır)

GraphQL, esnek ve verimli web hizmetleri oluşturmak için RESTful API'lerin bir alternatifi olarak önemli popülerlik kazanmıştır. GraphQL, Java, Python, ASP .NET Core gibi birçok farklı dilde mevcuttur. Ancak, bu makalede, C# bağlamında GraphQL kullanmaya, kavramlarına, uygulamasına ve pratik örneklerle kullanımına derinlemesine bakacağız. Ayrıca, GraphQL şema tanım sorgu sınıfının yardımıyla PDF dosyaları oluşturmak için C# için IronPDF kullanacağız.

GraphQL nedir?

GraphQL, istemcilerin tam olarak ihtiyaç duydukları verileri talep etmelerini sağlayan API'ler için bir sorgu dilidir. Birden fazla uç noktanın sabit veri yapılarını döndürebileceği RESTful API'lerin aksine, GraphQL servisleri istemcilerin ihtiyaç duydukları verilerin şeklini belirtmelerine olanak tanır, bu da onu daha verimli ve esnek hale getirir.

C#'ta GraphQL Kurulumu

C# projesinde GraphQL kullanmak için, .NET için popüler bir GraphQL uç nokta sunucusu uygulaması olan HotChocolate kütüphanesine ihtiyaçınız olacak.

Öncelikle, Hot Chocolate NuGet paketini yükleyin:

Install-Package HotChocolate.AspNetCore

GraphQL Şeması Oluşturma

GraphQL şeması, API'nizdeki veri türlerini ve işlemleri tanımlar. İşte bir blog uygulaması için şema-ilk uygulamanın basit bir örneği:

using HotChocolate.Types;

public class QueryType : ObjectType
{
    protected override void Configure(IObjectTypeDescriptor descriptor)
    {
        descriptor.Field("helloWorld")
            .Type<StringType>()
            .Resolve(context => "Hello, GraphQL!");
    }
}
using HotChocolate.Types;

public class QueryType : ObjectType
{
    protected override void Configure(IObjectTypeDescriptor descriptor)
    {
        descriptor.Field("helloWorld")
            .Type<StringType>()
            .Resolve(context => "Hello, GraphQL!");
    }
}
Imports HotChocolate.Types

Public Class QueryType
	Inherits ObjectType

	Protected Overrides Sub Configure(ByVal descriptor As IObjectTypeDescriptor)
		descriptor.Field("helloWorld").Type(Of StringType)().Resolve(Function(context) "Hello, GraphQL!")
	End Sub
End Class
$vbLabelText   $csharpLabel

Bu örnekte, sorgulandığında "Hello, GraphQL!" stringini döndüren bir helloWorld alanı tanımlıyoruz.

GraphQL Sunucusu Oluşturma

Sonrasında, ASP.NET Core kullanarak bir GraphQL sunucusu kurun:

using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.DependencyInjection;

public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddGraphQLServer()
            .AddQueryType<QueryType>();
    }

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        app.UseRouting();
        app.UseEndpoints(endpoints =>
        {
            endpoints.MapGraphQL();
        });
    }
}
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.DependencyInjection;

public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddGraphQLServer()
            .AddQueryType<QueryType>();
    }

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        app.UseRouting();
        app.UseEndpoints(endpoints =>
        {
            endpoints.MapGraphQL();
        });
    }
}
Imports Microsoft.AspNetCore.Builder
Imports Microsoft.AspNetCore.Hosting
Imports Microsoft.Extensions.DependencyInjection

Public Class Startup
	Public Sub ConfigureServices(ByVal services As IServiceCollection)
		services.AddGraphQLServer().AddQueryType(Of QueryType)()
	End Sub

	Public Sub Configure(ByVal app As IApplicationBuilder, ByVal env As IWebHostEnvironment)
		app.UseRouting()
		app.UseEndpoints(Sub(endpoints)
			endpoints.MapGraphQL()
		End Sub)
	End Sub
End Class
$vbLabelText   $csharpLabel

C#'tan GraphQL Sorgulama

Şimdi, C# istemcisiyle bu GraphQL API'sini GraphQL.Client NuGet paketi kullanarak nasıl sorgulayacağımıza bakalım:

using GraphQL.Client.Http;
using GraphQL.Client.Serializer.Newtonsoft;
using System;
using System.Threading.Tasks;

// GraphQL query class to interact with the API
public class Query
{
    public static async Task Main()
    {
        // Set up the GraphQL client
        using var graphQLClient = new GraphQLHttpClient(new GraphQLHttpClientOptions
        {
            EndPoint = new Uri("http://localhost:5000/graphql") // GraphQL endpoint
        }, new NewtonsoftJsonSerializer());

        // Define the GraphQL query
        var request = new GraphQLRequest
        {
            Query = @"
                {
                    helloWorld
                }"
        };

        var response = await graphQLClient.SendQueryAsync<dynamic>(request);
        // Print the response from the GraphQL server
        Console.WriteLine((string)response.Data.helloWorld);
    }
}
using GraphQL.Client.Http;
using GraphQL.Client.Serializer.Newtonsoft;
using System;
using System.Threading.Tasks;

// GraphQL query class to interact with the API
public class Query
{
    public static async Task Main()
    {
        // Set up the GraphQL client
        using var graphQLClient = new GraphQLHttpClient(new GraphQLHttpClientOptions
        {
            EndPoint = new Uri("http://localhost:5000/graphql") // GraphQL endpoint
        }, new NewtonsoftJsonSerializer());

        // Define the GraphQL query
        var request = new GraphQLRequest
        {
            Query = @"
                {
                    helloWorld
                }"
        };

        var response = await graphQLClient.SendQueryAsync<dynamic>(request);
        // Print the response from the GraphQL server
        Console.WriteLine((string)response.Data.helloWorld);
    }
}
'INSTANT VB NOTE: 'Option Strict Off' is used here since dynamic typing is used:
Option Strict Off

Imports GraphQL.Client.Http
Imports GraphQL.Client.Serializer.Newtonsoft
Imports System
Imports System.Threading.Tasks

' GraphQL query class to interact with the API
Public Class Query
	Public Shared Async Function Main() As Task
		' Set up the GraphQL client
		Dim graphQLClient = New GraphQLHttpClient(New GraphQLHttpClientOptions With {.EndPoint = New Uri("http://localhost:5000/graphql")}, New NewtonsoftJsonSerializer())

		' Define the GraphQL query
		Dim request = New GraphQLRequest With {.Query = "
                {
                    helloWorld
                }"}

'INSTANT VB NOTE: In the following line, Instant VB substituted 'Object' for 'dynamic' - this will work in VB with Option Strict Off:
		Dim response = Await graphQLClient.SendQueryAsync(Of Object)(request)
		' Print the response from the GraphQL server
		Console.WriteLine(CStr(response.Data.helloWorld))
	End Function
End Class
$vbLabelText   $csharpLabel

GraphQL C#, API tasarımı için güçlü ve esnek bir yol sunar ve HotChocolate gibi kütüphanelerle, GraphQL backend'i C# uygulamalarınıza entegre etmek kolay hale gelir. Bir şema tanımlayarak ve bir sunucu kurarak, verilerinizi bir GraphQL API aracılığıyla ortaya çıkarabilir ve C# istemcilerinden verimli bir şekilde sorgulayabilirsiniz.

Çıktı

GraphQL C# (Geliştiriciler İçin Nasıl Çalışır): Şekil 1 - Önceki kodun çalıştırılmasından elde edilen konsol çıktısı

C#'ta IronPDF'ye Giriş

IronPDF, PDF belgelerini zahmetsizce oluşturmanızı, düzenlemenizi ve manipüle etmenizi sağlayan çok yönlü bir C# kütüphanesidir. Bu bölümde, IronPDF'i tanıtacak ve onu dinamik PDF raporları oluşturmak için GraphQL ile birlikte nasıl kullanacağınızı göstereceğiz.

IronPDF, tüm düzenleri ve stilleri koruyarak HTML'den PDF'ye dönüştürme işlevi ile öne çıkar. Raporlar, faturalar ve belgeler için web içeriğinden PDF oluşturulmasına olanak tanır. HTML dosyaları, URL'ler ve HTML dizesi, PDF'lere sorunsuz bir şekilde dönüştürülebilir.

using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();

        // Convert HTML String to PDF
        var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
        var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
        pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");

        // Convert HTML File to PDF
        var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
        var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
        pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");

        // Convert URL to PDF
        var url = "http://ironpdf.com"; // Specify the URL
        var pdfFromUrl = renderer.RenderUrlAsPdf(url);
        pdfFromUrl.SaveAs("URLToPDF.pdf");
    }
}
using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();

        // Convert HTML String to PDF
        var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
        var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
        pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");

        // Convert HTML File to PDF
        var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
        var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
        pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");

        // Convert URL to PDF
        var url = "http://ironpdf.com"; // Specify the URL
        var pdfFromUrl = renderer.RenderUrlAsPdf(url);
        pdfFromUrl.SaveAs("URLToPDF.pdf");
    }
}
Imports IronPdf

Friend Class Program
	Shared Sub Main(ByVal args() As String)
		Dim renderer = New ChromePdfRenderer()

		' Convert HTML String to PDF
		Dim htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>"
		Dim pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent)
		pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf")

		' Convert HTML File to PDF
		Dim htmlFilePath = "path_to_your_html_file.html" ' Specify the path to your HTML file
		Dim pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath)
		pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf")

		' Convert URL to PDF
		Dim url = "http://ironpdf.com" ' Specify the URL
		Dim pdfFromUrl = renderer.RenderUrlAsPdf(url)
		pdfFromUrl.SaveAs("URLToPDF.pdf")
	End Sub
End Class
$vbLabelText   $csharpLabel

IronPDF Kurulumu

IronPDF ile başlamadan önce, NuGet paketini yükleyin:

Install-Package IronPdf

IronPDF Kullanarak GraphQL Verileri ile PDF Oluşturma

GraphQL API'mizden kullanıcı verilerini alan ve onları biçimlendirilmiş bir şekilde gösteren bir PDF raporu oluşturalım.

Örnek

using IronPdf;
using GraphQL.Client.Http;
using GraphQL.Client.Serializer.Newtonsoft;
using System;
using System.Threading.Tasks;

public class PdfGenerator
{
    public async Task GeneratePdfAsync()
    {
        // Initialize GraphQL client
        var graphQLClient = new GraphQLHttpClient(new GraphQLHttpClientOptions
        {
            EndPoint = new Uri("http://localhost:5000/graphql")
        }, new NewtonsoftJsonSerializer());

        // Define GraphQL query
        var query = new GraphQLRequest 
        {
            Query = @"
                {
                    helloWorld
                }"
        };

        var response = await graphQLClient.SendQueryAsync<dynamic>(query);
        var helloMessage = response.Data.helloWorld.ToString();

        // Create HTML content for the PDF
        var htmlContent = $@"
            <html>
            <head><title>GraphQL Report</title></head>
            <body>
                <h1>GraphQL Report</h1>
                <p>{helloMessage}</p>
            </body>
            </html>";

        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf(htmlContent);
        pdf.SaveAs("GraphQLReport.pdf");
    }
}
using IronPdf;
using GraphQL.Client.Http;
using GraphQL.Client.Serializer.Newtonsoft;
using System;
using System.Threading.Tasks;

public class PdfGenerator
{
    public async Task GeneratePdfAsync()
    {
        // Initialize GraphQL client
        var graphQLClient = new GraphQLHttpClient(new GraphQLHttpClientOptions
        {
            EndPoint = new Uri("http://localhost:5000/graphql")
        }, new NewtonsoftJsonSerializer());

        // Define GraphQL query
        var query = new GraphQLRequest 
        {
            Query = @"
                {
                    helloWorld
                }"
        };

        var response = await graphQLClient.SendQueryAsync<dynamic>(query);
        var helloMessage = response.Data.helloWorld.ToString();

        // Create HTML content for the PDF
        var htmlContent = $@"
            <html>
            <head><title>GraphQL Report</title></head>
            <body>
                <h1>GraphQL Report</h1>
                <p>{helloMessage}</p>
            </body>
            </html>";

        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf(htmlContent);
        pdf.SaveAs("GraphQLReport.pdf");
    }
}
'INSTANT VB NOTE: 'Option Strict Off' is used here since dynamic typing is used:
Option Strict Off

Imports IronPdf
Imports GraphQL.Client.Http
Imports GraphQL.Client.Serializer.Newtonsoft
Imports System
Imports System.Threading.Tasks

Public Class PdfGenerator
	Public Async Function GeneratePdfAsync() As Task
		' Initialize GraphQL client
		Dim graphQLClient = New GraphQLHttpClient(New GraphQLHttpClientOptions With {.EndPoint = New Uri("http://localhost:5000/graphql")}, New NewtonsoftJsonSerializer())

		' Define GraphQL query
		Dim query As New GraphQLRequest With {.Query = "
                {
                    helloWorld
                }"}

'INSTANT VB NOTE: In the following line, Instant VB substituted 'Object' for 'dynamic' - this will work in VB with Option Strict Off:
		Dim response = Await graphQLClient.SendQueryAsync(Of Object)(query)
		Dim helloMessage = response.Data.helloWorld.ToString()

		' Create HTML content for the PDF
		Dim htmlContent = $"
            <html>
            <head><title>GraphQL Report</title></head>
            <body>
                <h1>GraphQL Report</h1>
                <p>{helloMessage}</p>
            </body>
            </html>"

		Dim renderer = New ChromePdfRenderer()
		Dim pdf = renderer.RenderHtmlAsPdf(htmlContent)
		pdf.SaveAs("GraphQLReport.pdf")
	End Function
End Class
$vbLabelText   $csharpLabel

Bu örnekte, GraphQL istemcisini kullanarak GraphQL API'mizden helloWorld mesajını alıyoruz. Daha sonra bu mesajı içeren bir HTML şablonu oluşturur ve bu HTML'yi bir PDF dosyasına dönüştürmek için IronPDF'nin ChromePdfRenderer özelliğini kullanırız.

Çıktı

GraphQL C# (Geliştiriciler İçin Nasıl Çalışır): Şekil 2 - Önceki koddaki çıktılanan PDF

Sonuç

GraphQL, API geliştirmede oyunun kurallarını değiştiren bir unsur olarak ortaya çıkmış olup, geleneksel RESTful API'lerine göre verileri sorgulama ve manipüle etme konusunda daha esnek ve etkili bir yöntem sunmaktadır. İstemcilerin yalnızca ihtiyaç duydukları tür sorgu verilerini istemelerine izin verme yeteneği, performansın ve esnekliğin son derece önemli olduğu modern web uygulamaları için özellikle cazip hale getirir.

Dahası, GraphQL'in, IronPDF gibi araçlar ve paketlerle birleştirilmesi, dinamik ve veri odaklı PDF raporları üretmek için heyecan verici olanaklar açmaktadır. İster faturalar oluşturuyor olun, raporlar üretiyor olun, ister başka tür belgeler hazırlıyor olun, IronPDF'i C# dilindeki GraphQL ile entegre etmek, PDF üretimini otomatikleştirmek için güçlü ve etkili bir yol sağlamaktadır.

Özetle, GraphQL ve C#, modern, esnek ve verimli web uygulamaları kurmak için güçlü bir kombinasyon oluşturur. HotChocolate, GraphQL.Client ve IronPDF gibi kütüphanelerle, geliştiriciler günümüzün dijital ortamının gereksinimlerine yanıt verebilecek sağlam, veri odaklı uygulamalar oluşturmak için ihtiyaç duydukları tüm araçlara sahiptir.

Kullanıcıların faydalanmaları için HTML'den PDF'e kılavuzu, IronPDF Lisanslama Kılavuzu'nda bulunmaktadır.

Sıkça Sorulan Sorular

GraphQL, RESTful API'lerden nasıl farklıdır?

GraphQL, RESTful API'lerin tipik olarak fazla ve az veri çekmesini azaltarak müşterilerin tam olarak ihtiyaç duydukları verileri talep etmelerine olanak tanır. Bu esneklik, veri sorgulama ve manipülasyonunda daha verimli olmasını sağlar.

C#'ta bir GraphQL sunucusu kurmak için hangi kütüphane önerilir?

C#'ta bir GraphQL sunucusu kurmak için HotChocolate kütüphanesi önerilir. .NET ortamında şemaları tanımlamak ve sorguları yönetmek için araçlar sağlar.

C#'ta GraphQL verilerinden nasıl PDF raporları oluşturabilirim?

Bir GraphQL API'den veri alabilir ve bu verileri dinamik bir PDF raporuna dönüştürmek için IronPDF'i kullanabilirsiniz. IronPDF, HTML içeriğini PDF formatına dönüştürerek PDF belgelerini manipüle etmenize olanak tanır.

Bir C# projesine GraphQL'i entegre etme aşamaları nelerdir?

C# projenize GraphQL'i entegre etmek için HotChocolate NuGet paketini yükleyin, veri türlerini ve işlemleri tanımlamak için bir şema oluşturun ve sunucuyu ASP.NET Core kullanarak yapılandırın.

Bir C# istemci kullanarak bir GraphQL API'si nasıl sorgulanır?

API uç noktası URI'si ile bir GraphQLHttpClient kurmak için GraphQL.Client NuGet paketini kullanın. Sorgunuzu tanımlayın ve SendQueryAsync yöntemi ile gönderin.

C#'ta bir URL'yi PDF'ye dönüştürebilir miyim?

Evet, C# kullanarak IronPDF'in ChromePdfRenderer'ini kullanarak bir URL'yi PDF'ye dönüştürebilirsiniz. Bu, URL'lerden HTML içeriğini doğrudan bir PDF belgesine dönüştürmenize olanak tanır.

PDF oluşturmak için GraphQL ile birlikte IronPDF kullanmanın amacı nedir?

IronPDF, GraphQL üzerinden alınan dinamik HTML içeriğini PDF'lere dönüştürebilir, bu da güncellenmiş ve belirli veri çıktıları gerektiren veri odaklı raporlar oluşturmak için idealdir.

C#'da temel bir GraphQL şeması nasıl oluşturulur?

C#'ta temel bir GraphQL şeması oluşturmak için, HotChocolate kütüphanesinin şema tanımlama araçlarını kullanarak mevcut veri türlerini ve işlemleri tanımlayın. Bu, alanların ve veri türlerinin belirtilmesini içerir.

C# ile GraphQL kullanmanın web uygulamaları için avantajları nelerdir?

C# ile GraphQL kullanmak, modern web uygulamaları geliştirmek için kritik olan etkili veri sorgulama ve manipülasyonu sağlayarak esneklik ve performans avantajları sunar.

C# projesinde kullanmak için IronPDF nasıl yüklenir?

C# projenize NuGet paket yöneticisini kullanarak IronPDF'i Install-Package IronPdf komutu ile yükleyin. Bu, PDF oluşturma ve düzenleme yeteneklerine erişmenizi sağlar.

Jacob Mellor, Teknoloji Direktörü @ Team Iron
Chief Technology Officer

Jacob Mellor, Iron Software'in Teknoloji Müdürü ve C# PDF teknolojisinin öncüsü olan vizyoner bir mühendis. Iron Software’in temel kod tabanının ilk geliştiricisi olarak, şirketin ürün mimarisini kuruluşundan bu yana şekillendirdi ve CEO Cameron Rimington ile birlikte NASA, Tesla ve ...

Daha Fazlasını Oku

Iron Destek Ekibi

Haftanın 5 günü, 24 saat çevrimiçiyiz.
Sohbet
E-posta
Beni Ara