.NET ヘルプ

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

Kannaopat Udonpant
カンナパット・ウドンパント
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!");
    }
}

この例では、「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();
        });
    }
}

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);
    }
}

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");
    }
}

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");
    }
}

この例では、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ライセンスガイド利用者が利用できるように。

Kannaopat Udonpant
カンナパット・ウドンパント
ソフトウェアエンジニア
ソフトウェアエンジニアになる前に、カンナパットは日本の北海道大学から環境資源学の博士号を取得しました。学位を取得する過程で、カンナパットはバイオプロダクション工学部に所属する車両ロボティクス研究所のメンバーにもなりました。2022年には、C#のスキルを活かしてIron Softwareのエンジニアリングチームに参加し、IronPDFに注力しています。カンナパットは、IronPDFで使用されているコードの大部分を作成した開発者から直接学べることに価値を見いだしています。同僚との学び合いに加えて、Iron Softwareで働くことの社会的側面も楽しんでいます。コードやドキュメントを書いていない時には、カンナパットは通常、PS5でゲームをしたり、『The Last of Us』を再視聴したりしています。
< 以前
C# ベースコンストラクター呼び出し(開発者向けの動作方法)
次へ >
C# Long から String への変換(開発者向けの解説)