ライブ環境でテストする
ウォーターマークなしで本番環境でテストしてください。
必要な場所でいつでも動作します。
APIは今日のソフトウェア開発環境において不可欠であり、様々なソフトウェアシステムおよびコンポーネント間の通信を容易にします。 開発者がAPIを効率的に使用するためには、徹底的で理解しやすいドキュメントが必要です。 C# API ドキュメントワークフローを支援する効果的なツールとして、NSwag c# と IronPDF があります。 この記事では、NSwagを使用して生成する方法について説明します。 API .NET Coreの仕様で高品質なPDFドキュメントを生成するために、IronPDFを使用します。
Swagger UIを使用してRESTful Web APIを作成します。
C#コンソールアプリケーションを作成する。
NSwagライブラリをインストールします。
名前空間をインポートし、オブジェクトを作成します。
Swagger JSONをC#コードに処理します。
NSwagという.NET Swaggerツールチェーンは、ASP.NET Web API、ASP.NET Core、またはその他の.NETフレームワークを使用して構築されたAPIのSwagger仕様、またはOpenAPIドキュメントを作成するのを容易にするために作成されました。
コントローラー、モデル、および.NETアセンブリはすべて、NSwagによって自動的にSwagger仕様を生成するために使用できます。 NSwagは、APIコードの構造を調査することにより、APIエンドポイント、リクエスト/レスポンス形式、認証技術などをカバーする包括的なドキュメントを生成します。
開発者は、NSwagを.NETプロジェクトに統合することで、開発プロセスにSwagger生成を簡単に組み込むことができます。 開発者は、.NET CoreプロジェクトにNSwagを追加することで、コードベースとともにドキュメントの更新を確実に行うことができます。これにより、プロジェクトがビルドされるたびにSwagger仕様が自動的に生成されます。
NSwagが提供する幅広いカスタマイズの可能性により、開発者は生成されたSwagger仕様を簡単に自分のニーズに合わせて適応させることができます。 開発者は、設定およびアノテーションを通じて、生成されたドキュメントのレスポンスコード、パラメータの説明、ルート命名規則などの多くのコンポーネントを制御することができます。
Nswag Base Class Libraryには、コア、Annotation、およびコード生成の名前空間が含まれており、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仕様を生成し、IronPDFを使用してこれらをPDFに変換することで、包括的でオフライン対応のネットWeb APIドキュメントを作成し、簡単にアクセスおよび共有可能にすることができます。 ドキュメント. 以下の手順は統合プロセスの一部です:
「ツール」 > 「NuGet パッケージ マネージャー」 > 「パッケージ マネージャー コンソール」を選択します。
Install-Package IronPdf
検索結果からIronPDFパッケージを探して選択し、「インストール」オプションをクリックします。 Visual Studioは、ダウンロードおよびインストールを代わりに処理します。
IronPDFの機能、互換性、利用可能なダウンロードに関する追加情報については、NuGetウェブサイトのhttps://www.nuget.org/packages/IronPdfのページをご覧ください。
あるいは、DLLファイルを使用してIronPDFをプロジェクトに直接組み込むこともできます。DLLが含まれたZIPファイルをダウンロードするには、こちらをクリックしてください。 リンク. ファイルを解凍し、DLLをプロジェクトに追加してください。
DLLを含むZIPファイルを取得するには。 解凍後、DLLをプロジェクトに組み込んでください。
NSwagを活用することで、開発者はIronPDFと組み合わせてCodeGeneration.CSharp
を使用することにより、APIドキュメントとクライアントコードをより迅速に作成することができます。 以下の手順は、統合ワークフローに含まれます:
クライアントコードの生成: Swagger仕様からC#クライアントコードを生成するには、NSwag.CodeGeneration.CSharp
を使用します。 このステップでは、APIエンドポイントと通信するためのクライアントクラスとメソッドの作成が自動化されます。
NSwagを利用してGetDataする方法: 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 Softwareに関する追加情報をご覧ください。 ライブラリ.
9つの .NET API製品 オフィス文書用