.NET ヘルプ

GraphQL C# (開発者向けの仕組み)

公開済み 2024年6月6日
共有:

イントロダクション

GraphQLは、データをクエリして処理するためのオープンソースのデータクエリ言語です。Facebookによって開発され、RESTに代わる柔軟かつ効率的なソリューションとして広く採用されています。GraphQLでは、クライアントが必要とする正確なデータを指定して要求できます。これにより、サーバーから返されるデータが最小限になり、パフォーマンスの向上に寄与します。柔軟で効率的なウェブサービスを構築するためのRESTful APIの代替として、大きな人気を集めています。 GraphQLは、Java、Python、ASP .NET Coreなどのさまざまな言語で利用可能です。 しかし、この記事では、C#のコンテキストにおけるGraphQLの使用について掘り下げ、その概念、実装、および実践的な例を用いた使用法を探求します。 また、私たちはIronPDFGraphQLスキーマ定義クエリクラスを使用してPDFファイルを作成するためのC#用。

GraphQLとは何ですか?

APIのためのGraphQLクエリ言語は、クライアントが必要なデータのみを正確に要求できるようにします。 RESTful APIとは異なり、複数のエンドポイントが固定されたデータ構造を返すことがあるのに対して、GraphQLサービスはクライアントが必要なデータの形状を指定できるため、より効率的で柔軟性があります。

C#でGraphQLをセットアップする

C#プロジェクトでGraphQLを使用するには、人気のあるGraphQLエンドポイントサーバー実装であるHotChocolateライブラリが必要です。.NET用。

まず、Hot Chocolate NuGetパッケージをインストールします:

Install-Package HotChocolate.AspNetCore

GraphQLスキーマの作成

GraphQLの実装スキーマは、APIで利用可能なデータ型と操作を定義します。 以下は、ブログアプリケーション用のGraphQLサービススキーマのスキーマファーストの簡単な例です:

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

	Protected Overrides Sub Configure(ByVal descriptor As IObjectTypeDescriptor)
		descriptor.Field("hello world").Type(Of StringType)().Resolve(Function(context) "Hello, GraphQL!")
	End Sub
End Class
VB   C#

この例では、「hello world」というフィールドを定義し、文字列 "Hello, GraphQL" を返します。!照会されたとき。

GraphQLサーバーの作成

次に、ASP.NET Coreを使用してGraphQLサーバーを設定します:

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
VB   C#

C#からのGraphQLクエリ

それでは、GraphQL.Client NuGetパッケージを使用してC#クライアントからこのGraphQL APIをクエリする方法を見てみましょう。

using GraphQL.Client;
using GraphQL.Client.Http;
using System;
using System.Threading.Tasks;
// query class
public class query
{
    public static async Task Main()
    {
        using var graphQLClient = new GraphQLHttpClient(new GraphQLHttpClientOptions
        {
            EndPoint = new Uri("http://localhost:5000/graphql")
        });
        var schema = new GraphQLRequest
        {
            Query = @"
                {
                    hello world
                }"
        };
        var response = await graphQLClient.SendQueryAsync<dynamic>(schema);
        Console.WriteLine(response.Data.hello);
    }
}
using GraphQL.Client;
using GraphQL.Client.Http;
using System;
using System.Threading.Tasks;
// query class
public class query
{
    public static async Task Main()
    {
        using var graphQLClient = new GraphQLHttpClient(new GraphQLHttpClientOptions
        {
            EndPoint = new Uri("http://localhost:5000/graphql")
        });
        var schema = new GraphQLRequest
        {
            Query = @"
                {
                    hello world
                }"
        };
        var response = await graphQLClient.SendQueryAsync<dynamic>(schema);
        Console.WriteLine(response.Data.hello);
    }
}
'INSTANT VB NOTE: 'Option Strict Off' is used here since dynamic typing is used:
Option Strict Off

Imports GraphQL.Client
Imports GraphQL.Client.Http
Imports System
Imports System.Threading.Tasks
' query class
Public Class query
	Public Shared Async Function Main() As Task
		Dim graphQLClient = New GraphQLHttpClient(New GraphQLHttpClientOptions With {.EndPoint = New Uri("http://localhost:5000/graphql")})
		Dim schema = New GraphQLRequest With {.Query = "
                {
                    hello world
                }"}
'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)(schema)
		Console.WriteLine(response.Data.hello)
	End Function
End Class
VB   C#

GraphQL C#は、強力かつ柔軟なAPI設計方法を提供します。HotChocolateのようなライブラリを使用すると、C#アプリケーションにGraphQLバックエンドを統合することが簡単になります。 スキーマを定義し、サーバーを設定することで、GraphQL APIを通じてデータを公開し、C#クライアントから効率的にクエリを実行できます。

出力

GraphQL C#(開発者向けの動作方法):図1 - 前のコードを実行した際のコンソール出力

C#でのIronPDFの紹介

IronPDFは、PDFドキュメントを簡単に作成、編集、および操作できる多機能なC#ライブラリです。 このセクションでは、IronPDFを紹介し、GraphQLと連携して動的なPDFレポートを生成する方法を実演します。

IronPDFは、それ自身での卓越性を発揮します。HTMLからPDFへの機能、すべてのレイアウトとスタイルを保持します。 ウェブコンテンツからPDFを作成でき、レポート、請求書、およびドキュメントに最適です。 HTMLファイル、URL、およびHTML文字列はシームレスにPDFに変換できます。

using IronPdf;

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

        // 1. 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");

        // 2. 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");

        // 3. 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();

        // 1. 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");

        // 2. 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");

        // 3. 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()

		' 1. 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")

		' 2. 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")

		' 3. 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
VB   C#

IronPDFのインストール

始めるには、NuGetパッケージをインストールしてください: IronPDF

Install-Package IronPdf

IronPDFを使用してGraphQLデータからPDFを生成する

GraphQL APIからユーザーデータを取得し、フォーマットされた方法で表示するPDFレポートを作成しましょう。

using IronPdf;
using GraphQL.Client;
using GraphQL.Client.Http;
using System.Threading.Tasks;
using System;
public class PdfGenerator
{
    public async Task GeneratePdfAsync()
    {
        var graphQLClient = new GraphQLHttpClient(new GraphQLHttpClientOptions
        {
            EndPoint = new Uri("http://localhost:5000/graphql")
        });
        // graphql queries & graphql requests
        var query = new GraphQLRequest 
        {
            Query = @"
                {
                    hello world
                }"
        };
        var response = await graphQLClient.SendQueryAsync<dynamic>(query);
        var helloMessage = response.Data.hello.ToString();
        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;
using GraphQL.Client.Http;
using System.Threading.Tasks;
using System;
public class PdfGenerator
{
    public async Task GeneratePdfAsync()
    {
        var graphQLClient = new GraphQLHttpClient(new GraphQLHttpClientOptions
        {
            EndPoint = new Uri("http://localhost:5000/graphql")
        });
        // graphql queries & graphql requests
        var query = new GraphQLRequest 
        {
            Query = @"
                {
                    hello world
                }"
        };
        var response = await graphQLClient.SendQueryAsync<dynamic>(query);
        var helloMessage = response.Data.hello.ToString();
        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
Imports GraphQL.Client.Http
Imports System.Threading.Tasks
Imports System
Public Class PdfGenerator
	Public Async Function GeneratePdfAsync() As Task
		Dim graphQLClient = New GraphQLHttpClient(New GraphQLHttpClientOptions With {.EndPoint = New Uri("http://localhost:5000/graphql")})
		' graphql queries & graphql requests
		Dim query As New GraphQLRequest With {.Query = "
                {
                    hello world
                }"}
'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.hello.ToString()
		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
VB   C#

この例では、GraphQLクライアントを使用して、GraphQL APIから「hello world」メッセージを取得します。 次に、このメッセージを含むHTMLテンプレートを作成し、IronPDFのChromePdfRendererを使用してこのHTMLをPDFファイルに変換します。

出力

GraphQL C#(開発者向けの機能紹介):図 2 - 前のコードから出力されたPDF

結論

GraphQLはAPI開発における画期的な技術として登場し、従来のRESTful APIと比較して、データのクエリと操作をより柔軟かつ効率的に行う方法を提供します。クライアントが必要とするタイプのクエリデータのみを要求できるため、性能と柔軟性が最も重要視される現代のウェブアプリケーションに特に魅力的です。

さらに、GraphQLをツールやパッケージと組み合わせることでIronPDF動的かつデータ駆動のPDFレポートを生成するための興奮する可能性の世界を広げます。 請求書の作成、レポートの生成、その他の文書の作成を問わず、C#でIronPDFとGraphQLを統合することで、PDF生成を自動化する強力かつ効率的な方法を提供します。

要約すると、GraphQLとC#は、最新の柔軟で効率的なウェブアプリケーションを構築するための強力な組み合わせです。 HotChocolate、GraphQL.Client、IronPDFのようなライブラリを使用することで、開発者は今日のデジタル環境の要求を満たす堅牢でデータ駆動型のアプリケーションを構築するためのすべてのツールを揃えることができます。

以下のリンクでHTMLからPDFへのチュートリアルが利用できますIronPDFライセンスガイド利用者が利用できるように。

< 以前
C# ベースコンストラクター呼び出し(開発者向けの動作方法)
次へ >
C# Long から String への変換(開発者向けの解説)