Ocelot .NET(開発者向けの仕組み)
Ocelot API Gatewayは、複数のマイクロサービスにわたるリクエストを処理するためにAPIゲートウェイで一般的に使用されるAPIゲートウェイパターンを実装する.NETライブラリです。 それは軽量なAPIゲートウェイとして機能し、クライアントからのリクエストをダウンストリームサービスへルーティングします。 この記事では、Ocelot APIゲートウェイがクライアントとダウンストリームサービスの間にどのように位置するか、そのインストール、設定、主要機能、およびその機能を示す実用的な例を詳しく説明します。 また、IronPDF OverviewとOcelot APIの組み合わせも探ります。
Ocelot .NETとは何ですか?

Ocelotは、.NETアプリケーション向けのオープンソースAPIゲートウェイソリューションであり、複数のマイクロサービスにわたるリクエストのルーティングを容易にするよう設計されています。 それはリバースプロキシとして機能し、クライアントからのHTTPリクエストを管理し、ASP.NET Core環境で適切なサービスにルーティングします。 ASP.NET Core上で開発されたOcelotは、.NETエコシステムとシームレスに統合し、現代のアプリケーションに必要な強力な機能を提供します。
Ocelotの主な機能
ルーティング
Ocelotの機能の中核は、そのルーティング能力です。 開発者によって指定された設定に基づいて受信リクエストを適切なサービスルートに一致させ、サービス発見メカニズムと統合することができます。 これは特に、異なるAPIバージョンや多数のサービスエンドポイントを扱う際に有用なワイルドカードルーティングのサポートを含みます。
ミドルウェア / デリゲートハンドラ
Ocelotは、開発者がクライアントまたはサービスにリクエストおよびレスポンスが到達する前にそれらを処理できるカスタムミドルウェアまたはハンドラを挿入することを可能にします。これは、ヘッダーを追加したり、リクエストを記録したり、必要に応じてレスポンス構造を変更したりするのに役立ちます。
負荷分散
Ocelotは、事前定義されたいずれの戦略も要件に合わない場合に、ラウンドロビン、最小接続、およびカスタムプロバイダなどのさまざまな負荷分散戦略をサポートします。 この機能は、利用可能なサービス間で負荷を均等に分配し、アプリケーションの全体的な回復力と効率を向上させます。
認証と認可
APIエンドポイントのセキュリティは重要であり、Ocelotは、Identity Serverのような既存の認証プロバイダとの統合をサポートします。 JWTやOAuth2などの人気のある認証方式をサポートし、サービスへのユーザーアクセスをきめ細かく制御できます。
レート制限とQoS
レート制限は、サービスの乱用を防ぎ、特定の期間内にユーザーが行うことができるリクエストの数を制限することにより、公平な使用を確保するために重要です。 サービスがさまざまなネットワーク条件および負荷下でも利用可能で応答できることを保証するために、タイムアウトとリトライを設定するようなサービス品質 (QoS) オプション。
.NETプロジェクトでのOcelotの設定
プロジェクトにOcelotを統合するには、NuGetを介してOcelotパッケージをインストールし、Programクラスでそれを設定する必要があります:
dotnet add package Ocelot

サービス コンテナを設定するには、Startup.cs または Program.cs クラスで、リクエスト ビルダー ミドルウェアを含むサービスを構成します。
public void ConfigureServices(IServiceCollection services)
{
// Add Ocelot services to the service collection
services.AddOcelot();
}
public async void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
// Use the developer exception page when in development mode
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
// Start Ocelot middleware
await app.UseOcelot();
}
public void ConfigureServices(IServiceCollection services)
{
// Add Ocelot services to the service collection
services.AddOcelot();
}
public async void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
// Use the developer exception page when in development mode
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
// Start Ocelot middleware
await app.UseOcelot();
}
Public Sub ConfigureServices(ByVal services As IServiceCollection)
' Add Ocelot services to the service collection
services.AddOcelot()
End Sub
Public Async Sub Configure(ByVal app As IApplicationBuilder, ByVal env As IWebHostEnvironment)
' Use the developer exception page when in development mode
If env.IsDevelopment() Then
app.UseDeveloperExceptionPage()
End If
' Start Ocelot middleware
Await app.UseOcelot()
End Sub
Ocelotのルート設定
Ocelotは通常、ocelot.jsonという設定ファイルを使用してルーティングルールを定義します。 こちらは複数のルート設定例を示します。
{
"ReRoutes": [
{
"DownstreamPathTemplate": "/api/users/{id}",
"DownstreamScheme": "https",
"DownstreamHostAndPorts": [
{
"Host": "userapi.com",
"Port": 443
}
],
"UpstreamPathTemplate": "/users/{id}",
"UpstreamHttpMethod": ["Get"]
},
{
"DownstreamPathTemplate": "/api/products/{id}",
"DownstreamScheme": "https",
"DownstreamHostAndPorts": [
{
"Host": "productapi.com",
"Port": 443
}
],
"UpstreamPathTemplate": "/products/{id}",
"UpstreamHttpMethod": ["Get"]
}
],
"GlobalConfiguration": {
"BaseUrl": "http://yourgateway.com"
}
}
この設定は、APIゲートウェイへのリクエストがパスとHTTPメソッドに基づいてどのように異なるダウンストリームサービスにルーティングされるかを指定し、JSONファイルを使用して設定します。
IronPDFとOcelot .NETの使用

.NETアプリケーションでIronPDFのHTML-to-PDF変換を使用してOcelotを組み合わせることは、PDF生成リクエストを特定のサービスにルーティングしたり内部で処理したりできる強力なソリューションを提供します。 ここでは、基本的な.NET Coreアプリケーションを設定し、APIゲートウェイとしてOcelotを使用し、HTMLからPDFを生成するIronPDFを実装する手順を説明します。
IronPDF は HTML から PDF への変換に秀でており、元のレイアウトとスタイルを正確に保存します。 これは、レポート、請求書、ドキュメントなどの Web ベースのコンテンツから PDF を作成するのに最適です。 HTML ファイル、URL、または生の HTML 文字列のサポートにより、IronPDF は高品質な 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");
}
}
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 Class
ステップ1: .NET Core Webアプリケーションのセットアップ
まず、新しい.NET Core Web APIプロジェクトを作成します。 これは.NET CLIまたはVisual Studioを使用して行うことができます。
.NET CLIを使用する場合:
dotnet new webapi -n OcelotWithIronPDF
cd OcelotWithIronPDF
dotnet new webapi -n OcelotWithIronPDF
cd OcelotWithIronPDF
ステップ2: 必要なパッケージの追加
OcelotとIronPDFをインストールする必要があります。 これらのパッケージはNuGetを介して追加できます。
dotnet add package Ocelot
dotnet add package IronPdf
dotnet add package Ocelot
dotnet add package IronPdf
ステップ3: Ocelotの構成
ocelot.jsonファイルをプロジェクトのルートに追加して、Ocelotのルーティングを設定します。 この設定は、OcelotがPDF生成リクエストを同一アプリケーション内のIronPDFが処理する特定のパスにルーティングすることを前提としています。
{
"ReRoutes": [
{
"DownstreamPathTemplate": "/api/pdf",
"DownstreamScheme": "https",
"DownstreamHostAndPorts": [
{
"Host": "localhost",
"Port": 5001
}
],
"UpstreamPathTemplate": "/generatepdf",
"UpstreamHttpMethod": ["Post"]
}
],
"GlobalConfiguration": {
"BaseUrl": "http://localhost:5000"
}
}
ステップ4: Startup.cs の構成
Startup.csを更新してOcelotのミドルウェアを含めます。 IronPDFがローカルファイルシステムから資産をロードする必要がある可能性があるため、静的ファイルを使用するようにアプリケーションを構成することも確認してください。
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers();
services.AddOcelot();
}
public async void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
await app.UseOcelot();
}
}
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers();
services.AddOcelot();
}
public async void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
await app.UseOcelot();
}
}
Public Class Startup
Public Sub ConfigureServices(ByVal services As IServiceCollection)
services.AddControllers()
services.AddOcelot()
End Sub
Public Async Sub Configure(ByVal app As IApplicationBuilder, ByVal env As IWebHostEnvironment)
If env.IsDevelopment() Then
app.UseDeveloperExceptionPage()
End If
app.UseRouting()
app.UseAuthorization()
app.UseEndpoints(Sub(endpoints)
endpoints.MapControllers()
End Sub)
Await app.UseOcelot()
End Sub
End Class
ステップ5: IronPDFによるPDF生成の実装
Controllersフォルダ内に新しいコントローラPdfController.csを作成します。 このコントローラはPDF生成リクエストを処理します。
using Microsoft.AspNetCore.Mvc;
using IronPdf;
namespace OcelotWithIronPdf.Controllers
{
[ApiController]
[Route("api/[controller]")]
public class PdfController : ControllerBase
{
[HttpPost]
public IActionResult CreatePdfFromHtml([FromBody] string htmlContent)
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(htmlContent);
var output = pdf.BinaryData;
// Return the PDF as a file result
return File(output, "application/pdf", "generated.pdf");
}
}
}
using Microsoft.AspNetCore.Mvc;
using IronPdf;
namespace OcelotWithIronPdf.Controllers
{
[ApiController]
[Route("api/[controller]")]
public class PdfController : ControllerBase
{
[HttpPost]
public IActionResult CreatePdfFromHtml([FromBody] string htmlContent)
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(htmlContent);
var output = pdf.BinaryData;
// Return the PDF as a file result
return File(output, "application/pdf", "generated.pdf");
}
}
}
Imports Microsoft.AspNetCore.Mvc
Imports IronPdf
Namespace OcelotWithIronPdf.Controllers
<ApiController>
<Route("api/[controller]")>
Public Class PdfController
Inherits ControllerBase
<HttpPost>
Public Function CreatePdfFromHtml(<FromBody> htmlContent As String) As IActionResult
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf(htmlContent)
Dim output = pdf.BinaryData
' Return the PDF as a file result
Return File(output, "application/pdf", "generated.pdf")
End Function
End Class
End Namespace
ステップ6: アプリケーションの実行
ocelot.jsonで指定したポートをリッスンするようにアプリケーションが正しく設定されていることを確認します。 これはProperties/launchSettings.jsonで設定できます。
{
"profiles": {
"OcelotWithIronPDF": {
"commandName": "Project",
"launchBrowser": false,
"applicationUrl": "https://localhost:5001;http://localhost:5000",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
}
}
ここで、アプリケーションを実行すると、HTML コンテンツを http://localhost:5000/generatepdf に投稿し、応答として PDF を受け取ることができるようになります。

この例は、同一アプリケーション内でIronPDFとOcelotを使用した基本的な実装を紹介しています。 本番環境のシナリオは、エンドポイントを保護し、エラーシナリオを処理し、特定の要件に基づいてPDF生成プロセスを最適化することを検討してください。
結論

結論として、Ocelot はマイクロサービスアーキテクチャにおけるリクエストの管理とルーティングに適した選択肢です。 ルーティング、負荷分散、ミドルウェアサポート、認証などの強力な機能により、.NET 開発者にとっても強力なツールとなります。 提供された詳細な手順に従うことにより、Ocelotを.NETプロジェクトに効果的に統合してAPIゲートウェイのニーズを合理化できます。
さらに、PDF生成機能を必要とする場合は、OcelotとIronPDFを統合することで、アプリケーションの機能を向上させることが簡単です。 IronPDF は 無料トライアルを提供し、ライセンスは PDF ニーズに対するコスト効果の高いソリューションから始まります。
OcelotとIronPDFを一緒に活用することで、ルーティングとドキュメント生成の要件を満たす包括的で効率的なマイクロサービスインフラストラクチャを構築できます。
よくある質問
Ocelotは.NETアプリケーションにおけるマイクロサービスのコミュニケーションをどのように改善できるでしょうか?
OcelotはAPIゲートウェイとして機能し、.NETアプリケーション内の複数のマイクロサービス間でHTTPリクエストの効率的なルーティングと管理を容易にします。ルーティング、負荷分散、認証などの機能を提供し、サービス間のコミュニケーションを効率化します。
IronPDFと一緒にOcelotを使用する利点は何ですか?
OcelotをIronPDFと統合することで、.NETアプリケーション内でPDF生成リクエストを効率的にルーティングすることができます。IronPDFはHTMLからPDFへの変換時に元のレイアウトやスタイルを維持するため、レポートや請求書などのWebベースのコンテンツ生成に最適です。
どのようにしてOcelotを負荷分散のために構成しますか?
Ocelotは、ラウンドロビンや最小接続数などのさまざまな負荷分散戦略をサポートしており、通常ocelot.jsonと呼ばれるJSONファイルを介して構成できます。これにより、マイクロサービス間のトラフィックの均等な分配が保証されます。
Ocelotのアーキテクチャにおいてミドルウェアはどんな役割を果たしますか?
Ocelotのミドルウェアはカスタムハンドラーを挿入してリクエストとレスポンスを処理することができます。これによりヘッダーの追加、ロギング、レスポンスの修正などのタスクが可能になり、APIゲートウェイの柔軟性と機能性が向上します。
どのようにして.NETプロジェクトにOcelotをセットアップしますか?
.NETプロジェクトにOcelotをセットアップするには、まずNuGetを通じてOcelotパッケージをインストールし、ProgramクラスにOcelotサービスを追加し、設定ファイルでルートを定義します。このセットアップにより、APIリクエストのルーティングと管理が容易になります。
Ocelotはどのような戦略を使ってルーティングを処理しますか?
Ocelotはocelot.jsonファイルに指定された設定駆動型のルーティングを使用して、APIゲートウェイから適切な下流サービスへリクエストを誘導します。ワイルドカードルーティングやサービス発見メカニズムをサポートし、柔軟なルーティング設定が可能です。
OcelotはどのようにしてAPIアクセスのセキュリティを確保しますか?
OcelotはIdentity Serverなどの認証プロバイダと統合し、JWTやOAuth2スキームをサポートしてAPIアクセスをセキュアにします。これによりユーザーの許可を管理し、エンドポイントの保護を保証します。
OcelotはPDF生成のワークフローを最適化するために使用できますか?
はい、OcelotはIronPDFを使用するようなPDF生成専用サービスにリクエストをルーティングすることができます。この設定により、リクエストを効率的に処理し、変換時にドキュメントの忠実度を保持することでPDFワークフローが最適化されます。
Ocelotはどのようにしてサービス発見メカニズムと統合されますか?
OcelotはConsulやEurekaのようなサービス発見メカニズムとの統合をサポートし、これによりサービスの現在の状態に基づいてリクエストを動的にルーティングします。この統合により、マイクロサービスアーキテクチャにおけるサービス管理が簡素化されます。




