
GraphQL C#(開発者向けの動作方法)
GraphQL は柔軟性と効率性を備えたWebサービスを構築するためのRESTful APIの代替として大きな人気を得ています。 GraphQLは、Java、Python、ASP .NETコアなど、様々な言語で利用可能です。 しかし、この記事ではC#の文脈でGraphQLを使用する方法を掘り下げ、その概念、実装、使用方法を実用的な例と共に探ります。 また、GraphQLスキーマ定義のクエリクラスを使用してPDFファイルを作成するためにC#のIronPDFを使用します。
GraphQLとは何ですか?
GraphQLは、クライアントが必要なデータだけを要求できるAPIのためのクエリ言語です。 複数のエンドポイントが固定データ構造を返す可能性のあるRESTful APIとは異なり、GraphQLサービスではクライアントが必要なデータの形状を指定できるため、より効率的で柔軟です。
Setting up GraphQL in C#
C#プロジェクトでGraphQLを使用するには、.NET用の人気のあるGraphQLエンドポイントサーバー実装であるHotChocolateライブラリが必要です。
まず、Hot ChocolateのNuGetパッケージをインストールします:
GraphQLスキーマの作成
GraphQLスキーマは、APIで利用可能なデータ型と操作を定義します。 以下はブログアプリケーションのスキーマファースト実装の簡単な例です:
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この例では、クエリされたときに"Hello, GraphQL!"という文字列を返すhelloWorldフィールドを定義します。
GraphQLサーバーの作成
次に、ASP.NETコアを使用して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();
});
}
}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 ClassQuerying GraphQL from C#
次に、このGraphQL APIをC#クライアントからGraphQL.Client NuGetパッケージを使用してクエリする方法を見てみましょう。
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 ClassGraphQL C#は、APIを設計するための強力で柔軟な方法を提供し、HotChocolateのようなライブラリを使用することで、C#アプリケーションにGraphQLバックエンドを統合することが容易になります。 スキーマを定義し、サーバーをセットアップすることで、データをGraphQL APIを通じて公開し、C#クライアントから効率的にクエリを行うことができます。
出力

Intro to IronPDF in C#
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();
// 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 ClassIronPDFのインストール
IronPDFの使用を開始するには、NuGetパッケージをインストールします:
GraphQLデータを使用したIronPDFによるPDF生成
GraphQL APIからユーザーデータを取得し、フォーマットされた形式で表示する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この例では、GraphQLクライアントを使用して当社のGraphQL APIからhelloWorldメッセージを取得します。 次に、このメッセージを含むHTMLテンプレートを作成し、IronPDFのChromePdfRendererを使用してこのHTMLをPDFファイルに変換します。
出力

結論
GraphQLはAPI開発における画期的なテクノロジーとして登場し、従来のRESTful APIと比較してデータを効率的かつ柔軟にクエリし操作する方法を提供します。クライアントが必要なタイプのクエリデータのみを要求できる能力は、パフォーマンスと柔軟性が求められる現代のWebアプリケーションで特に魅力的です。
さらに、IronPDFのようなツールやパッケージとGraphQLを組み合わせることで、動的でデータ駆動型のPDFレポートを生成するエキサイティングな可能性の世界が広がります。 請求書の作成、レポートの生成、またはその他の種類のドキュメントの作成において、C#でIronPDFをGraphQLと統合することは、PDF生成を自動化するための強力で効率的な方法を提供します。
総じて、GraphQLとC#は、現代的で柔軟かつ効率的なWebアプリケーションを構築するための強力な組み合わせです。 HotChocolate、GraphQL.Client、IronPDFのようなライブラリを使うことで、開発者は今日のデジタル環境の要件を満たす堅牢でデータ駆動型のアプリケーションを構築するために必要なすべてのツールを手に入れることができます。
HTMLからPDFについてのチュートリアルは、次のIronPDFライセンシングガイドで利用可能です。

ジェイコブ・メラーはIron Softwareの最高技術責任者(CTO)であり、C# PDFテクノロジーを開拓する先見的なエンジニアです。Iron Softwareのコアコードベースを支えるオリジナル開発者として、彼は創業以来、会社の製品アーキテクチャを形成し、CEOのCameron Rimingtonとともに、会社をNASA、Tesla、および世界的な政府機関にサービスを提供する50人以上の会社に変えました。1999年にロンドンで最初のソフトウェアビジネスを開業し、2005年に最初 for .NETコンポーネントを作成した後、Microsoftのエコシステム全体で複雑な問題を解決することを専門としました。
関連する記事


