跳至頁尾內容
.NET 幫助

GraphQL C#(開發者如何理解它)

GraphQL 作為 RESTful API 的替代方案,在建立彈性且有效率的 Web 服務方面已獲得極高的知名度。 GraphQL 可用於許多不同的語言,例如 Java、Python、ASP .NET Core。 但在這篇文章中,我們會深入探討在 C# 的情境中使用 GraphQL,以實際範例探索其概念、實作和用法。 此外,我們還將使用 IronPDF for C# 來借助 GraphQL 結構定義查詢類來建立 PDF 檔案。

什麼是 GraphQL?

GraphQL 是一種 API 的查詢語言,可讓客戶精確地請求所需的資料。 與 RESTful API 不同的是,RESTful API 的多個端點可能會傳回固定的資料結構,而 GraphQL 服務則允許客戶指定所需資料的形狀,因此更有效率也更有彈性。

在 C# 中設定 GraphQL;。

若要在 C# 專案中使用 GraphQL,您將需要 HotChocolate 函式庫,這是一個適用於 .NET 的熱門 GraphQL 端點伺服器實作。

首先,安裝 Hot Chocolate NuGet 套件:

Install-Package HotChocolate.AspNetCore

建立 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!");
    }
}
using HotChocolate.Types;

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

在這個範例中,我們定義了一個 helloWorld 欄位,當被查詢時會回傳一個字串"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();
        });
    }
}
$vbLabelText   $csharpLabel

從 C# 查詢 GraphQL;。

現在,讓我們看看如何使用 GraphQL.Client NuGet 套件從 C# 客戶端查詢此 GraphQL API:

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);
    }
}
$vbLabelText   $csharpLabel

GraphQL C# 提供了強大且靈活的 API 設計方式,有了 HotChocolate 之類的函式庫,將 GraphQL 後端整合到 C# 應用程式就變得簡單直接。 透過定義模式和設定伺服器,您可以透過 GraphQL API 揭露資料,並從 C# 用戶端有效率地進行查詢。

輸出

GraphQL C# (How It Works For Developers):圖 1 - 執行先前程式碼的控制台輸出

C#中的 IronPDF 入門;。

IronPDF 是一個多功能的 C# 函式庫,可讓您毫不費力地建立、編輯和處理 PDF 文件。 在本節中,我們將介紹 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");
    }
}
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");
    }
}
$vbLabelText   $csharpLabel

安裝 IronPDF。

要開始使用 IronPDF,請安裝 NuGet 套件:

Install-Package IronPdf

使用 IronPDF 利用 GraphQL 資料生成 PDF.

讓我們來建立一份 PDF 報告,從我們的 GraphQL API 抓取使用者資料,並以格式化的方式顯示。

範例

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

在這個範例中,我們使用 GraphQL 客戶端從 GraphQL API 抓取 helloWorld 訊息。 然後,我們建構一個包含此訊息的 HTML 模板,並使用 IronPDF 的 ChromePdfRenderer 將此 HTML 轉換為 PDF 檔案。

輸出

GraphQL C# (How It Works For Developers):圖 2 - 前述程式碼輸出的 PDF

結論

GraphQL 已經成為 API 開發中的遊戲改變者,相較於傳統的 RESTful API,它提供了更靈活、更有效率的資料查詢與操作方式。GraphQL 允許用戶端僅要求他們所需的查詢資料類型,這使得它對於性能和靈活性至關重要的現代網路應用程式特別具有吸引力。

此外,將 GraphQL 與 IronPDF 等工具和套件結合,將為產生動態和資料驅動的 PDF 報告開啟一個令人振奮的可能性世界。 無論您是要建立發票、產生報告或製作任何其他類型的文件,在 C# 中整合 IronPDF 與 GraphQL,都能提供強大且有效率的方式來自動生成 PDF。

總而言之,GraphQL 與 C# 是建構現代化、靈活且有效率的 Web 應用程式的強大組合。 有了 HotChocolate、GraphQL.Client 和 IronPDF 等程式庫,開發人員就擁有了建立穩健、資料驅動應用程式所需的所有工具,以滿足今日數位環境的需求。

HTML 轉 PDF 教學可在以下IronPDF 授權指南供使用者使用。

常見問題解答

GraphQL 與 RESTful API 有何不同?

GraphQL 允許客戶端精確請求所需數據,從而減少了 RESTful API 中常見的過度獲取和獲取不足的問題。這種靈活性使其在查詢和操作資料方面更加有效率。

在 C# 中搭建 GraphQL 伺服器,推薦使用哪個函式庫?

建議使用 HotChocolate 函式庫在 C# 中搭建 GraphQL 伺服器。它提供了在 .NET 環境中定義模式和管理查詢的工具。

如何使用 C# 從 GraphQL 資料建立 PDF 報告?

您可以從 GraphQL API 取得數據,並使用 IronPDF 將數據轉換為動態 PDF 報告。 IronPDF 讓您透過將 HTML 內容轉換為 PDF 格式來操作 PDF 文件。

將 GraphQL 整合到 C# 專案中需要哪些步驟?

若要將 GraphQL 整合到 C# 專案中,請安裝 HotChocolate NuGet 包,定義一個架構來概述資料類型和操作,並使用 ASP.NET Core 設定伺服器。

如何使用 C# 用戶端查詢 GraphQL API?

使用 GraphQL.Client NuGet 套件,透過 API 端點 URI 設定GraphQLHttpClient 。定義查詢,並使用SendQueryAsync方法傳送查詢。

我可以用 C# 將 URL 轉換為 PDF 嗎?

是的,您可以使用 IronPDF 的ChromePdfRenderer在 C# 中將 URL 轉換為 PDF。它允許您直接將 URL 中的 HTML 內容渲染到 PDF 文件中。

為什麼要將 IronPDF 與 GraphQL 結合使用來建立 PDF 檔案?

IronPDF 可以將透過 GraphQL 取得的動態 HTML 內容轉換為 PDF,非常適合建立需要更新和特定資料輸出的資料驅動型報告。

如何在 C# 中建立基本的 GraphQL schema?

若要在 C# 中建立基本的 GraphQL schema,請使用 HotChocolate 庫的 schema 定義工具定義可用的資料類型和操作。這包括指定欄位及其資料類型。

在 Web 應用程式中使用 GraphQL 和 C# 有哪些優點?

將 GraphQL 與 C# 結合使用,可以提供靈活性和效能優勢,從而實現高效的資料查詢和操作,這對於建立現代 Web 應用程式至關重要。

如何在 C# 專案中安裝 IronPDF?

使用 NuGet 套件管理器,透過指令 ` Install-Package IronPdf為 C# 專案安裝 IronPDF。這樣您就可以使用其 PDF 生成和操作功能。

Jacob Mellor,Team Iron 首席技術官
首席技術長

Jacob Mellor 是 Iron Software 的首席技術官,也是一位富有遠見的工程師,率先開發了 C# PDF 技術。作為 Iron Software 核心程式碼庫的最初開發者,他自公司成立之初便參與塑造了其產品架構,並與執行長 Cameron Rimington 一起將其發展成為一家擁有 50 多名員工、服務於 NASA、特斯拉和全球政府機構的公司。

Jacob 於 1998 年至 2001 年在曼徹斯特大學獲得土木工程一級榮譽學士學位。 1999 年,他在倫敦創辦了自己的第一家軟體公司;2005 年,他創建了自己的第一個 .NET 元件。此後,他專注於解決微軟生態系統中的複雜問題。

他的旗艦產品 IronPDF 和 IronSuite .NET 庫在全球 NuGet 上的安裝量已超過 3000 萬次,其基礎程式碼持續為全球開發者工具提供支援。憑藉 25 年的商業經驗和 41 年的程式設計專長,Jacob 始終致力於推動企業級 C#、Java 和 Python PDF 技術的創新,同時指導下一代技術領導者。