.NET ヘルプ

OpenAPI .NET(開発者向けの仕組み)

更新済み 7月 1, 2024
共有:

OpenAPI(以前はSwaggerとして知られていました)は、RESTful APIを構築および記述するための仕様です。これにより、開発者はAPIの構造を標準化された形式で定義でき、さまざまなツールやサービスがREST APIを効果的に理解し、やり取りし、フィードバックを提供できるようになります。 .NETエコシステムでは、OpenAPI .NET統合は、APIを作成、ドキュメント化、および消費するのを容易にするいくつかのライブラリおよびツールを介してサポートされています。

この記事では、OpenAPIサポート仕様とIronPDFを使用してPDFファイルを作成し、それをAPIコールのレスポンスとして返す方法について学びます。

.NETでOpenAPIの設定

OpenAPI .NETプロジェクトを開始するには、通常、Swashbuckleライブラリを使用します。このライブラリは、ASP.NET Core APIのためにOpenAPI仕様書またはドキュメントを生成します。

ステップ 1: Swashbuckleをインストールする

まず、Visual StudioでNuGetを介してSwashbuckle.AspNetCoreパッケージをインストールする必要があります。 これを行うには、NuGetパッケージマネージャーコンソールを使用できます:

Install-Package Swashbuckle.AspNetCore

または、.NET CLI を使用して:

dotnet add package Swashbuckle.AspNetCore

ステップ2:Swashbuckleの構成

次に、ASP.NET CoreプロジェクトでSwashbuckleを設定する必要があります。 Startup.csファイルを更新して、Swaggerサービスを追加し、Swaggerミドルウェアを設定する必要があります。

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddControllers();
// Learn more about configuring Swagger/OpenAPI description at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();

var app = builder.Build();

// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI();
}

app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();
app.Run();
var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddControllers();
// Learn more about configuring Swagger/OpenAPI description at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();

var app = builder.Build();

// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI();
}

app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();
app.Run();
Dim builder = WebApplication.CreateBuilder(args)

' Add services to the container.
builder.Services.AddControllers()
' Learn more about configuring Swagger/OpenAPI description at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer()
builder.Services.AddSwaggerGen()

Dim app = builder.Build()

' Configure the HTTP request pipeline.
If app.Environment.IsDevelopment() Then
	app.UseSwagger()
	app.UseSwaggerUI()
End If

app.UseHttpsRedirection()
app.UseAuthorization()
app.MapControllers()
app.Run()
VB   C#

API ドキュメントの生成と閲覧

Swashbuckleの設定が完了すると、アプリケーションを実行するだけで自動的にOpenAPIドキュメントが生成されます。 これらのOpenAPIの説明は、「http://localhost:5000/swagger」からアクセスできるSwagger UIで表示できます。

OpenAPI 定義の使用

OpenAPI定義は、クライアントSDKの生成、APIのテスト、および異なるサービス間の一貫性を確保するための強力なツールとなります。 OpenAPI仕様は、サービスのソースコードにアクセスすることなく、その能力を人間およびコンピューターが理解できるようにするための標準的な、言語に依存しないAPIインターフェースを定義しています。

カスタム注釈によるOpenAPIの拡張

Swashbuckleを使用すると、カスタムアノテーションを追加してOpenAPIドキュメントを強化することができます。 これらのアノテーションは、APIの動作やデータ構造に関する追加情報を提供するために、直接コントローラーやモデルに追加することができます。

例: カスタム注釈

using Microsoft.AspNetCore.Mvc;

namespace WebApplication8.Controllers
{
    [ApiController]
    [Route("[controller]")]
    public class WeatherForecastController : ControllerBase
    {
        private static readonly string[] Summaries = new[]
        {
            "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
        };

        private readonly ILogger<WeatherForecastController> _logger;

        public WeatherForecastController(ILogger<WeatherForecastController> logger)
        {
            _logger = logger;
        }

        [HttpGet(Name = "GetWeatherForecast")] 
        [SwaggerOperation(Summary = "Gets the weather forecast for the next 5 days")]
        [SwaggerResponse(200, "Successfully retrieved weather forecast")]
        public IEnumerable<WeatherForecast> Get()
        {
            return Enumerable.Range(1, 5).Select(index => new WeatherForecast
            {
                Date = DateTime.Now.AddDays(index),
                TemperatureC = Random.Shared.Next(-20, 55),
                Summary = Summaries[Random.Shared.Next(Summaries.Length)]
            })
            .ToArray();
        }
    }
}
using Microsoft.AspNetCore.Mvc;

namespace WebApplication8.Controllers
{
    [ApiController]
    [Route("[controller]")]
    public class WeatherForecastController : ControllerBase
    {
        private static readonly string[] Summaries = new[]
        {
            "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
        };

        private readonly ILogger<WeatherForecastController> _logger;

        public WeatherForecastController(ILogger<WeatherForecastController> logger)
        {
            _logger = logger;
        }

        [HttpGet(Name = "GetWeatherForecast")] 
        [SwaggerOperation(Summary = "Gets the weather forecast for the next 5 days")]
        [SwaggerResponse(200, "Successfully retrieved weather forecast")]
        public IEnumerable<WeatherForecast> Get()
        {
            return Enumerable.Range(1, 5).Select(index => new WeatherForecast
            {
                Date = DateTime.Now.AddDays(index),
                TemperatureC = Random.Shared.Next(-20, 55),
                Summary = Summaries[Random.Shared.Next(Summaries.Length)]
            })
            .ToArray();
        }
    }
}
Imports Microsoft.AspNetCore.Mvc

Namespace WebApplication8.Controllers
	<ApiController>
	<Route("[controller]")>
	Public Class WeatherForecastController
		Inherits ControllerBase

		Private Shared ReadOnly Summaries() As String = { "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" }

		Private ReadOnly _logger As ILogger(Of WeatherForecastController)

		Public Sub New(ByVal logger As ILogger(Of WeatherForecastController))
			_logger = logger
		End Sub

		<HttpGet(Name := "GetWeatherForecast")>
		<SwaggerOperation(Summary := "Gets the weather forecast for the next 5 days")>
		<SwaggerResponse(200, "Successfully retrieved weather forecast")>
		Public Function [Get]() As IEnumerable(Of WeatherForecast)
			Return Enumerable.Range(1, 5).Select(Function(index) New WeatherForecast With {
				.Date = DateTime.Now.AddDays(index),
				.TemperatureC = Random.Shared.Next(-20, 55),
				.Summary = Summaries(Random.Shared.Next(Summaries.Length))
			}).ToArray()
		End Function
	End Class
End Namespace
VB   C#

この例では、SwaggerOperationおよびSwaggerResponse属性が使用され、エンドポイントの詳細なOpenAPI説明および応答コードを提供しています。

出力

OpenAPI .NET(開発者のための動作説明):図1 - カスタムアノテーションの出力

実行ボタンをクリックすると、次の応答が表示されます。

OpenAPI .NET(開発者向けの動作方法):図2 - レスポンス出力

IronPDF

IronPDFは、.NETおよびJava、Python、Node.jsでPDFを生成、編集、読み取るための強力なツールです。プログラマー向けに最適化されており、コードからPDFファイルの作成を容易に行うことができます。IronPDFは、HTML、CSS、JavaScript、および画像をPDFドキュメントに変換する能力を提供します。

機能

  • HTML to PDF: HTML、CSS、JavaScriptを利用してPDFを生成。
  • PDFの編集: 既存のPDFドキュメントにテキスト、画像、ページ番号、さらにはカスタムヘッダーやフッターを追加。
  • PDFの読み取り: PDFファイルからテキスト、画像、メタデータを抽出。
  • セキュリティ: パスワード保護や暗号化オプションでPDFドキュメントを保護。

利点

  • 使いやすさ: シンプルなAPIで時間を節約。
  • 高品質: 正確で美しいPDFドキュメントを生成。
  • 柔軟性: 様々なプラットフォームや言語で利用可能。

対応ライセンス

IronPDFは様々なライセンスオプションがあり、Lite License、Plus License、Professional License、Unlimited Licenseが用意されています。

技術サポートや詳細については、Iron Softwareの公式サイトをご覧ください。

IronPDF for ASP.NETは、ASP.NETアプリケーション内でPDFドキュメントの生成と操作をシームレスに実現する強力なツールです。 直感的なAPIと堅牢な機能を備えたIronPDFを使用すれば、開発者はPDF生成をウェブプロジェクトに簡単に統合でき、ユーザーに向けて文書管理機能を強化することができます。 作成からHTMLコンテンツのPDFへの変換、画像やテキストなどの動的要素の追加まで、IronPDFはプロセスを簡素化し、効率的でプロフェッショナルなドキュメント作成を実現します。

NuGetパッケージマネージャーを使用してインストールする手順:

  1. Visual Studio で ASP.NET プロジェクトを開き、「ツール」メニューに移動します。

  2. 「NuGet パッケージ マネージャー」を選択し、「ソリューションの NuGet パッケージを管理」をクリックします。

  3. 「ブラウズ」タブで「IronPDF」と検索し、希望のバージョンを選択します。 「インストール」をクリックして、パッケージをプロジェクトに追加します。 IronPDFとその依存関係は自動的にダウンロードおよび統合され、ASP.NETアプリケーションでその機能をシームレスに活用し始めることができます。

    OpenAPI .NET(開発者向けの使い方):図3 - IronPDF

API呼び出しに応じてPDFファイルを取得

次のコードをコントローラーファイルに追加します。これはIronPDFを使用してPDFファイルを作成し、APIコールにPDFファイルを返します。

using Microsoft.AspNetCore.Mvc;
using IronPdf;

namespace WebApplication8.Controllers
{
    [ApiController]
    [Route("[controller]")]
    public class WeatherForecastController : ControllerBase
    {
        private static readonly string[] Summaries = new[]
        {
            "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
        };

        private readonly ILogger<WeatherForecastController> _logger;

        public WeatherForecastController(ILogger<WeatherForecastController> logger)
        {
            _logger = logger;
        }

        [HttpGet(Name = "GetWeatherForecast")]
        public IActionResult GetWeatherForecastPdf()
        {
            var htmlContent = @"
        <html>
        <head>
            <title>Weather Forecast</title>
        </head>
        <body>
            <h1>Weather Forecast</h1>
            <table>
                <tr>
                    <th>Date</th>
                    <th>Temperature (Celsius)</th>
                    <th>Summary</th>
                </tr>";

            var forecasts = Enumerable.Range(1, 5).Select(index => new WeatherForecast
            {
                Date = DateTime.Now.AddDays(index),
                TemperatureC = Random.Shared.Next(-20, 55),
                Summary = Summaries[Random.Shared.Next(Summaries.Length)]
            });

            foreach (var forecast in forecasts)
            {
                htmlContent += $@"
            <tr>
                <td>{forecast.Date.ToShortDateString()}</td>
                <td>{forecast.TemperatureC}</td>
                <td>{forecast.Summary}</td>
            </tr>";
            }

            htmlContent += @"
            </table>
        </body>
        </html>";

            // Convert HTML to PDF
            var renderer = new ChromePdfRenderer();
            var pdfDocument = renderer.RenderHtmlAsPdf(htmlContent);

            // Return PDF file
            var pdfBytes = pdfDocument.BinaryData;
            return File(pdfBytes, "application/pdf", "WeatherForecast.pdf");
        }
    }
}
using Microsoft.AspNetCore.Mvc;
using IronPdf;

namespace WebApplication8.Controllers
{
    [ApiController]
    [Route("[controller]")]
    public class WeatherForecastController : ControllerBase
    {
        private static readonly string[] Summaries = new[]
        {
            "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
        };

        private readonly ILogger<WeatherForecastController> _logger;

        public WeatherForecastController(ILogger<WeatherForecastController> logger)
        {
            _logger = logger;
        }

        [HttpGet(Name = "GetWeatherForecast")]
        public IActionResult GetWeatherForecastPdf()
        {
            var htmlContent = @"
        <html>
        <head>
            <title>Weather Forecast</title>
        </head>
        <body>
            <h1>Weather Forecast</h1>
            <table>
                <tr>
                    <th>Date</th>
                    <th>Temperature (Celsius)</th>
                    <th>Summary</th>
                </tr>";

            var forecasts = Enumerable.Range(1, 5).Select(index => new WeatherForecast
            {
                Date = DateTime.Now.AddDays(index),
                TemperatureC = Random.Shared.Next(-20, 55),
                Summary = Summaries[Random.Shared.Next(Summaries.Length)]
            });

            foreach (var forecast in forecasts)
            {
                htmlContent += $@"
            <tr>
                <td>{forecast.Date.ToShortDateString()}</td>
                <td>{forecast.TemperatureC}</td>
                <td>{forecast.Summary}</td>
            </tr>";
            }

            htmlContent += @"
            </table>
        </body>
        </html>";

            // Convert HTML to PDF
            var renderer = new ChromePdfRenderer();
            var pdfDocument = renderer.RenderHtmlAsPdf(htmlContent);

            // Return PDF file
            var pdfBytes = pdfDocument.BinaryData;
            return File(pdfBytes, "application/pdf", "WeatherForecast.pdf");
        }
    }
}
Imports Microsoft.AspNetCore.Mvc
Imports IronPdf

Namespace WebApplication8.Controllers
	<ApiController>
	<Route("[controller]")>
	Public Class WeatherForecastController
		Inherits ControllerBase

		Private Shared ReadOnly Summaries() As String = { "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" }

		Private ReadOnly _logger As ILogger(Of WeatherForecastController)

		Public Sub New(ByVal logger As ILogger(Of WeatherForecastController))
			_logger = logger
		End Sub

		<HttpGet(Name := "GetWeatherForecast")>
		Public Function GetWeatherForecastPdf() As IActionResult
			Dim htmlContent = "
        <html>
        <head>
            <title>Weather Forecast</title>
        </head>
        <body>
            <h1>Weather Forecast</h1>
            <table>
                <tr>
                    <th>Date</th>
                    <th>Temperature (Celsius)</th>
                    <th>Summary</th>
                </tr>"

			Dim forecasts = Enumerable.Range(1, 5).Select(Function(index) New WeatherForecast With {
				.Date = DateTime.Now.AddDays(index),
				.TemperatureC = Random.Shared.Next(-20, 55),
				.Summary = Summaries(Random.Shared.Next(Summaries.Length))
			})

			For Each forecast In forecasts
				htmlContent &= $"
            <tr>
                <td>{forecast.Date.ToShortDateString()}</td>
                <td>{forecast.TemperatureC}</td>
                <td>{forecast.Summary}</td>
            </tr>"
			Next forecast

			htmlContent &= "
            </table>
        </body>
        </html>"

			' Convert HTML to PDF
			Dim renderer = New ChromePdfRenderer()
			Dim pdfDocument = renderer.RenderHtmlAsPdf(htmlContent)

			' Return PDF file
			Dim pdfBytes = pdfDocument.BinaryData
			Return File(pdfBytes, "application/pdf", "WeatherForecast.pdf")
		End Function
	End Class
End Namespace
VB   C#

OpenAPI .NET(開発者向けの動作方法について):図4 - API出力

添付されたPDFファイルをダウンロードして開いてください。

OpenAPI .NET (開発者向けの仕組み): 図5 - PDF出力

結論

OpenAPI(以前はSwaggerとして知られていました)は、Swashbuckleのようなライブラリを通じて、.NETエコシステムにおけるRESTful APIの設計とドキュメント作成を効率化し、ASP.NET Coreプロジェクトの自動APIドキュメント生成を容易にします。 OpenAPIとIronPDFのシナジーを示すために、HTMLコンテンツからPDFファイルを生成し、APIレスポンスとして返すIronPDFの機能を活用する方法を紹介し、ASP.NETアプリケーションの機能を強化しました。 OpenAPI基準を採用し、IronPDFの強力な機能を活用することで、開発者はAPIドキュメントの実践を強化し、ユーザーに洗練された機能豊富なアプリケーションを提供できます。

IronPDFのライセンスに関する詳細情報については、IronPDFのライセンスページをご参照ください。 さらに、HTMLからPDFへの変換に関する詳細なチュートリアルをご覧いただけます。

< 以前
Humanizer C#(開発者向けの仕組み)
次へ >
C#におけるMicrosoft.Extensions.Caching.Memoryの例(PDF付き)

準備はできましたか? バージョン: 2024.9 新発売

無料のNuGetダウンロード 総ダウンロード数: 10,659,073 View Licenses >