ライブ環境でテストする
ウォーターマークなしで本番環境でテストしてください。
必要な場所でいつでも動作します。
APIは今日のソフトウェア開発環境において不可欠であり、様々なソフトウェアシステムおよびコンポーネント間の通信を容易にします。 開発者がAPIを効率的に使用するためには、徹底的で理解しやすいドキュメントが必要です。 C# APIドキュメントのワークフローに役立つ2つの効果的なツールは、NSwag C#とIronPDFです。 この記事では、NSwagを使用して生成する方法について説明します。API仕様.NET Coreを使用し、IronPDFを使用してこれらの仕様から高品質のPDFドキュメントを作成します。
Swagger UIを使用してRESTful Web APIを作成します。
C#コンソールアプリケーションを作成します。
NSwagライブラリをインストールします。
名前空間をインポートし、オブジェクトを作成します。
Swagger JSONをC#コードに処理する。
NSwagと呼ばれる.NET Swaggerツールチェーンは、ASP.NET Web API、ASP.NET Core、または他の.NET Frameworkを使用して構築されたAPI用のSwagger仕様、またはOpenAPIドキュメントを簡単に作成できるように作成されました。
コントローラー、モデル、および.NETアセンブリはすべて、NSwagによって自動的にSwagger仕様を生成するために使用できます。 NSwagは、APIコードの構造を調査することにより、APIエンドポイント、リクエスト/レスポンス形式、認証技術などをカバーする包括的なドキュメントを生成します。
開発者は、NSwagを.NETプロジェクトに統合することで、開発プロセスにSwagger生成を簡単に組み込むことができます。 開発者は、.NET CoreプロジェクトにNSwagを追加することで、プロジェクトがビルドされるたびに自動的にSwagger仕様が生成され、ドキュメントがコードベースとともに更新されるようにすることができます。
NSwagが提供する幅広いカスタマイズの可能性により、開発者は生成されたSwagger仕様を簡単に自分のニーズに合わせて適応させることができます。 開発者は、設定およびアノテーションを通じて、生成されたドキュメントのレスポンスコード、パラメータの説明、ルート命名規則などの多くのコンポーネントを制御することができます。
NSwag基本クラスライブラリには、コア、アノテーション、コード生成名前空間が含まれており、NuGetからインストールすることで利用できるようになります。 NSwagをC#アプリケーションに統合してコードとSwagger仕様を生成する方法、およびNSwagが開発プロセスの効率をどのように向上させるかについて。
自動化されたクライアント生成を通じて、開発者はNSwagをWindowsデスクトップアプリケーションに統合することにより、デスクトップアプリ内からAPIにアクセスするためのコードを効率的に生成することができます。 オンライン・サービスやRESTful APIと通信するデスクトップ・アプリケーションを開発する場合、かなり役立ちます。
NSwagは、Webアプリケーションで内部APIのAPIドキュメントを生成し、外部APIを消費するためのクライアントコードを生成するために使用できます。これは、開発者がアプリケーションのフロントエンドとバックエンドコンポーネントを一貫して保つのに役立ちます。
以下は、NSwagを使用してC#クライアントコードを生成する方法を示すコードの例です:
using NSwag.CodeGeneration.CSharp;
using NSwag;
using System.Reflection;
using System.CodeDom.Compiler;
using Microsoft.CodeAnalysis;
class Program
{
static async Task Main(string[] args)
{
System.Net.WebClient wclient = new System.Net.WebClient();
// Create JSON file data from the Swagger net core web API
var document = await OpenApiDocument.FromJsonAsync(wclient.DownloadString("http://localhost:5013/swagger/v1/swagger.json"));
wclient.Dispose();
var settings = new CSharpClientGeneratorSettings
{
ClassName = "Weather",
CSharpGeneratorSettings =
{
Namespace = "Demo"
}
};
var generator = new CSharpClientGenerator(document, settings);
var code = generator.GenerateFile();
var assembly = CompileCode(code);
var clientType = assembly.GetType("Demo.WeatherClient"); // Replace with your actual client class name
var httpClient = new HttpClient();
var client = (IApiClient)Activator.CreateInstance(clientType, httpClient);
var result = await client.GetWeatherForecastAsync();
foreach (var item in result)
{
Console.WriteLine($"Date: {item.Date} F: {item.TemperatureF} C: {item.TemperatureC} Summary: {item.Summary}");
}
}
static Assembly CompileCode(string code)
{
using (var memoryStream = new MemoryStream())
{
var assemblyPath = Path.GetDirectoryName(typeof(object).Assembly.Location);
List<MetadataReference> references = new List<MetadataReference>();
references.Add(MetadataReference.CreateFromFile(typeof(object).GetTypeInfo().Assembly.Location));
references.Add(MetadataReference.CreateFromFile(Path.Combine(assemblyPath, "Microsoft.AspNetCore.Mvc.dll")));
references.Add(MetadataReference.CreateFromFile(Path.Combine(assemblyPath, "System.Web.Http.dll")));
var compilation = Microsoft.CodeAnalysis.CSharp.CSharpCompilation.Create("ApiClient")
.AddReferences(Microsoft.CodeAnalysis.MetadataReference.CreateFromFile(typeof(object).Assembly.Location))
.AddSyntaxTrees(Microsoft.CodeAnalysis.CSharp.SyntaxFactory.ParseSyntaxTree(code)).AddReferences(references);
var emitResult = compilation.Emit(memoryStream);
if (!emitResult.Success)
{
var diagnostics = emitResult.Diagnostics;
Console.WriteLine("Compilation errors:");
foreach (var diagnostic in diagnostics)
{
Console.WriteLine(diagnostic);
}
return null;
}
memoryStream.Seek(0, SeekOrigin.Begin);
return Assembly.Load(memoryStream.ToArray());
}
}
public interface IApiClient
{
Task<List<WeatherForecast>> GetWeatherForecastAsync(); // Replace with your actual method name and return type
}
public class WeatherForecast
{
public DateTime Date { get; set; }
public int TemperatureC { get; set; }
public int TemperatureF { get; set; }
public string Summary { get; set; }
}
}
using NSwag.CodeGeneration.CSharp;
using NSwag;
using System.Reflection;
using System.CodeDom.Compiler;
using Microsoft.CodeAnalysis;
class Program
{
static async Task Main(string[] args)
{
System.Net.WebClient wclient = new System.Net.WebClient();
// Create JSON file data from the Swagger net core web API
var document = await OpenApiDocument.FromJsonAsync(wclient.DownloadString("http://localhost:5013/swagger/v1/swagger.json"));
wclient.Dispose();
var settings = new CSharpClientGeneratorSettings
{
ClassName = "Weather",
CSharpGeneratorSettings =
{
Namespace = "Demo"
}
};
var generator = new CSharpClientGenerator(document, settings);
var code = generator.GenerateFile();
var assembly = CompileCode(code);
var clientType = assembly.GetType("Demo.WeatherClient"); // Replace with your actual client class name
var httpClient = new HttpClient();
var client = (IApiClient)Activator.CreateInstance(clientType, httpClient);
var result = await client.GetWeatherForecastAsync();
foreach (var item in result)
{
Console.WriteLine($"Date: {item.Date} F: {item.TemperatureF} C: {item.TemperatureC} Summary: {item.Summary}");
}
}
static Assembly CompileCode(string code)
{
using (var memoryStream = new MemoryStream())
{
var assemblyPath = Path.GetDirectoryName(typeof(object).Assembly.Location);
List<MetadataReference> references = new List<MetadataReference>();
references.Add(MetadataReference.CreateFromFile(typeof(object).GetTypeInfo().Assembly.Location));
references.Add(MetadataReference.CreateFromFile(Path.Combine(assemblyPath, "Microsoft.AspNetCore.Mvc.dll")));
references.Add(MetadataReference.CreateFromFile(Path.Combine(assemblyPath, "System.Web.Http.dll")));
var compilation = Microsoft.CodeAnalysis.CSharp.CSharpCompilation.Create("ApiClient")
.AddReferences(Microsoft.CodeAnalysis.MetadataReference.CreateFromFile(typeof(object).Assembly.Location))
.AddSyntaxTrees(Microsoft.CodeAnalysis.CSharp.SyntaxFactory.ParseSyntaxTree(code)).AddReferences(references);
var emitResult = compilation.Emit(memoryStream);
if (!emitResult.Success)
{
var diagnostics = emitResult.Diagnostics;
Console.WriteLine("Compilation errors:");
foreach (var diagnostic in diagnostics)
{
Console.WriteLine(diagnostic);
}
return null;
}
memoryStream.Seek(0, SeekOrigin.Begin);
return Assembly.Load(memoryStream.ToArray());
}
}
public interface IApiClient
{
Task<List<WeatherForecast>> GetWeatherForecastAsync(); // Replace with your actual method name and return type
}
public class WeatherForecast
{
public DateTime Date { get; set; }
public int TemperatureC { get; set; }
public int TemperatureF { get; set; }
public string Summary { get; set; }
}
}
Imports NSwag.CodeGeneration.CSharp
Imports NSwag
Imports System.Reflection
Imports System.CodeDom.Compiler
Imports Microsoft.CodeAnalysis
Friend Class Program
Shared Async Function Main(ByVal args() As String) As Task
Dim wclient As New System.Net.WebClient()
' Create JSON file data from the Swagger net core web API
Dim document = Await OpenApiDocument.FromJsonAsync(wclient.DownloadString("http://localhost:5013/swagger/v1/swagger.json"))
wclient.Dispose()
Dim settings = New CSharpClientGeneratorSettings With {
.ClassName = "Weather",
.CSharpGeneratorSettings = { [Namespace] = "Demo" }
}
Dim generator = New CSharpClientGenerator(document, settings)
Dim code = generator.GenerateFile()
Dim assembly = CompileCode(code)
Dim clientType = assembly.GetType("Demo.WeatherClient") ' Replace with your actual client class name
Dim httpClient As New HttpClient()
Dim client = DirectCast(Activator.CreateInstance(clientType, httpClient), IApiClient)
Dim result = Await client.GetWeatherForecastAsync()
For Each item In result
Console.WriteLine($"Date: {item.Date} F: {item.TemperatureF} C: {item.TemperatureC} Summary: {item.Summary}")
Next item
End Function
Private Shared Function CompileCode(ByVal code As String) As System.Reflection.Assembly
Using memoryStream As New MemoryStream()
Dim assemblyPath = Path.GetDirectoryName(GetType(Object).Assembly.Location)
Dim references As New List(Of MetadataReference)()
references.Add(MetadataReference.CreateFromFile(GetType(Object).GetTypeInfo().Assembly.Location))
references.Add(MetadataReference.CreateFromFile(Path.Combine(assemblyPath, "Microsoft.AspNetCore.Mvc.dll")))
references.Add(MetadataReference.CreateFromFile(Path.Combine(assemblyPath, "System.Web.Http.dll")))
Dim compilation = Microsoft.CodeAnalysis.CSharp.CSharpCompilation.Create("ApiClient").AddReferences(Microsoft.CodeAnalysis.MetadataReference.CreateFromFile(GetType(Object).Assembly.Location)).AddSyntaxTrees(Microsoft.CodeAnalysis.CSharp.SyntaxFactory.ParseSyntaxTree(code)).AddReferences(references)
Dim emitResult = compilation.Emit(memoryStream)
If Not emitResult.Success Then
Dim diagnostics = emitResult.Diagnostics
Console.WriteLine("Compilation errors:")
For Each diagnostic In diagnostics
Console.WriteLine(diagnostic)
Next diagnostic
Return Nothing
End If
memoryStream.Seek(0, SeekOrigin.Begin)
Return System.Reflection.Assembly.Load(memoryStream.ToArray())
End Using
End Function
Public Interface IApiClient
Function GetWeatherForecastAsync() As Task(Of List(Of WeatherForecast)) ' Replace with your actual method name and return type
End Interface
Public Class WeatherForecast
Public Property [Date]() As DateTime
Public Property TemperatureC() As Integer
Public Property TemperatureF() As Integer
Public Property Summary() As String
End Class
End Class
使用したいAPIについては、Swagger仕様のURLを指定します。(swaggerUrl
). 次に、DLLアセンブリに生成され実行されるクライアントコードが定義されます。 OpenApiDocument
が使用されます。 指定されたURLからSwaggerドキュメントを非同期で読み込むには、FromJsonAsync
を使用します。 生成されたクライアントコードを変更するには、コードジェネレーターの設定を調整します。(CSharpClientGeneratorSettings (C# クライアント生成設定)). この例では、生成されたクライアントコードのクラス名と名前空間が指定されています。
ロードされたSwaggerドキュメントから、CSharpClientGenerator
のインスタンスを構築し、それを使用してクライアントコードを生成します。(クライアントコード). 作成されたクライアントコードは指定された出力パスに保存されます。 手順中に発生する可能性のある例外やエラーに対応し、関連する通知をコンソールに表示します。
NSwagは、Swagger仕様を使用してJava、TypeScript、C#など多くの言語でクライアントコードを生成することができます。 これにより、開発者がアプリケーションでAPIを簡単に使用できるようになります。
Swagger仕様を基に、NSwagはASP.NET Coreコントローラーのようなサーバーコードを生成することもできます。 これは、API実装のためのサーバーサイドコードを迅速に作成するのに役立ちます。
Swagger仕様を考慮して、NSwagはSwagger UIのようなインタラクティブなAPIドキュメントを生成することができます。 APIエンドポイントの探索とテストのために、使いやすいインターフェイスがこのドキュメントによって提供されます。
SOAPベースのAPIと統合するために、NSwagはプロキシクラスを生成できます。 これにより、プログラマーは生成されたクライアントコードを使用して、アプリケーション内からSOAPサービスにアクセスすることができます。
NSwagは、Swagger仕様がOpenAPI/Swagger標準に従っていることを確認することができます。 これにより、APIドキュメントのエラーや不一致を確認しやすくなります。
開発者は、NSwagとIronPDFを統合することで、両方の技術の利点を活用し、APIドキュメントのワークフローを改善することができます。 開発者は、NSwagを使用してSwagger仕様を生成することで、すぐに利用可能で共有可能な、完全でオフライン対応の.NET Web APIドキュメントを作成できます。IronPDFでPDFに変換します。. 以下の手順は統合プロセスの一部です:
Install-Package IronPdf
検索結果からIronPDFパッケージを選択し、"インストール "オプションをクリックしてください。 Visual Studioは、ダウンロードおよびインストールを代わりに処理します。
IronPDFの機能、互換性、利用可能なダウンロードに関する追加情報については、以下をご覧ください。NuGetのIronPdfページ.
また、DLLファイルを使ってIronPDFをプロジェクトに直接組み込むこともできます。DLLを含むZIPファイルをダウンロードするにはIronPdfダウンロードリンク. ファイルを解凍し、DLLをプロジェクトに追加してください。
DLLを含むZIPファイルを入手するには、解凍後、DLLをプロジェクトに組み込んでください。
NSwagを活用することで、開発者はIronPDFと組み合わせてCodeGeneration.CSharp
を使用することにより、APIドキュメントとクライアントコードをより迅速に作成することができます。 以下の手順は、統合ワークフローに含まれます:
クライアントコードの生成: Swagger仕様からC#クライアントコードを生成するには、NSwag.CodeGeneration.CSharp
を使用します。 このステップでは、APIエンドポイントと通信するためのクライアントクラスとメソッドの作成が自動化されます。
**Swagger仕様からJSONドキュメントを作成するには、CodeGeneration.CSharp
を使用します。 この段階では、リクエスト/レスポンス形式、認証技術、およびAPIクライアントエンドポイントが、人間が読みやすいドキュメントに作成されます。
JSONをPDFに変換: 生成されたコードの結果をPDFドキュメントに変換するには、IronPDFを使用します。 この段階では、HTMLテキストが仕上げられたPDFドキュメントに変換され、共有や配布の準備が整います。
using IronPdf;
StringBuilder sb = new StringBuilder();
foreach (var item in result)
{
sb.Append($"<p>Date: {item.Date} F: {item.TemperatureF} C: {item.TemperatureC} Summary: {item.Summary}</p>");
}
var Renderer = new IronPdf.HtmlToPdf();
var PDF = Renderer.RenderHtmlAsPdf(sb.ToString());
// Save PDF to file
PDF.SaveAs("output.pdf");
Console.WriteLine("PDF generated successfully!");
Console.ReadKey();
using IronPdf;
StringBuilder sb = new StringBuilder();
foreach (var item in result)
{
sb.Append($"<p>Date: {item.Date} F: {item.TemperatureF} C: {item.TemperatureC} Summary: {item.Summary}</p>");
}
var Renderer = new IronPdf.HtmlToPdf();
var PDF = Renderer.RenderHtmlAsPdf(sb.ToString());
// Save PDF to file
PDF.SaveAs("output.pdf");
Console.WriteLine("PDF generated successfully!");
Console.ReadKey();
Imports IronPdf
Private sb As New StringBuilder()
For Each item In result
sb.Append($"<p>Date: {item.Date} F: {item.TemperatureF} C: {item.TemperatureC} Summary: {item.Summary}</p>")
Next item
Dim Renderer = New IronPdf.HtmlToPdf()
Dim PDF = Renderer.RenderHtmlAsPdf(sb.ToString())
' Save PDF to file
PDF.SaveAs("output.pdf")
Console.WriteLine("PDF generated successfully!")
Console.ReadKey()
上記のコードは、結果オブジェクトから取得したデータにアクセスし、「Date」、「TemperatureF」、「TemperatureC」、「Summary」のフィールドをループ内で段落に追加します。次に、PDFの出力ファイルパスを指定し、PDFが正常に生成されたことをユーザーに通知します。
以下は上記のコードからの結果です。
CodeGeneration
NSwagテクノロジーのCSharp
やIronPDFは、クライアントコードの生成およびAPIドキュメンテーションのプロセスを効率化するためにうまく連携します。 これらのツールをC#アプリケーションに統合することで、開発者はAPI駆動のソリューションの作成をスピードアップし、APIドキュメントの作成を自動化し、プロフェッショナルな外観のPDF出版物を生成できます。 NSwag.CodeGeneration.CSharp
と IronPDF は、デスクトップ、ウェブ、クラウドベースのアプリケーションを開発しているかどうかにかかわらず、API を効率的にドキュメント化し、C# でクライアント コードを生成するための完全なソリューションを提供します。
$749 Liteバンドルには、永久ライセンス、1年間のソフトウェア保守、およびライブラリのアップグレードが含まれています。 IronPDFは再配布と時間に制限のある無料ライセンスを提供しています。ユーザーは試用期間中、透かしを視認することなくソリューションを評価できます。 価格とライセンスの詳細については、以下を参照してください。IronPDFのライセンス情報. に移動しますIron ソフトウェアライブラリのページIron Softwareの製品ライブラリの詳細については、こちらをご覧ください。
9つの .NET API製品 オフィス文書用