Test dans un environnement réel
Test en production sans filigrane.
Fonctionne partout où vous en avez besoin.
Les API sont essentielles dans l'environnement de développement logiciel d'aujourd'hui car elles facilitent la communication entre les différents systèmes et composants logiciels. Pour que les développeurs puissent utiliser efficacement les API, il faut que les documents soient complets et compréhensibles. NSwag C# et IronPDF sont deux outils efficaces qui peuvent faciliter le flux de travail de la documentation de l'API C#. Ce billet explique comment utiliser NSwag pour générer desSpécifications de l'API avec .NET Core et produire des documents PDF de haute qualité à partir de ces spécifications à l'aide d'IronPDF.
Créer une API web reposante à l'aide de Swagger UI.
Créez une application console en C#.
Installer la bibliothèque NSwag.
Importer l'espace de noms et créer l'objet.
Traiter le code Swagger JSON vers C#.
Une chaîne d'outils Swagger .NET appelée NSwag a été créée pour faciliter la création de spécifications Swagger, ou de documents OpenAPI, pour les API construites à l'aide d'ASP.NET Web API, ASP.NET Core ou d'autres frameworks .NET.
Les contrôleurs, les modèles et les assemblages .NET peuvent tous être utilisés par NSwag pour produire automatiquement des spécifications Swagger. NSwag génère une documentation complète qui couvre les points d'extrémité de l'API, les formulaires de demande/réponse, les techniques d'authentification, etc. en examinant la structure du code de l'API.
Les développeurs peuvent facilement inclure la génération de Swagger dans leurs processus de développement en intégrant NSwag aux projets .NET. Les développeurs peuvent s'assurer que la documentation est mise à jour avec la base de code en ajoutant NSwag à un projet .NET Core, qui produira automatiquement des spécifications Swagger à chaque fois que le projet est construit.
Grâce aux nombreuses possibilités de personnalisation offertes par NSwag, les développeurs peuvent facilement adapter les spécifications Swagger générées pour répondre à leurs besoins spécifiques. Les développeurs peuvent contrôler de nombreux éléments de la documentation générée, notamment les codes de réponse, les explications des paramètres et les conventions de dénomination des itinéraires, grâce aux paramètres de configuration et aux annotations.
La bibliothèque de classes de base NSwag comprend les espaces de noms core, Annotation et génération de code, qui devraient être disponibles en les installant à partir de NuGet. Intégrer NSwag dans une application C# pour générer du code et des spécifications Swagger, et comment NSwag peut améliorer l'efficacité du processus de développement.
Grâce à la génération automatisée de clients, les développeurs peuvent produire efficacement du code pour accéder aux API directement à partir de leurs applications de bureau en intégrant NSwag dans une application de bureau Windows. Elle peut s'avérer très utile lors du développement d'applications de bureau qui communiquent avec des services en ligne ou des API RESTful.
NSwag peut être utilisé dans les applications web pour générer de la documentation sur les API internes et du code client pour consommer des API externes. Cela aide les développeurs à maintenir la cohérence entre les composants frontaux et dorsaux de leurs applications.
Voici un exemple de code qui vous montre comment utiliser NSwag pour produire du code client 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
Pour l'API que nous souhaitons utiliser, nous spécifions l'URL de la spécification Swagger(swaggerUrl
). Ensuite, le code client généré et exécuté dans un assemblage DLL est défini. OpenApiDocument
est utilisé. Pour charger le document Swagger de manière asynchrone depuis l'URL donnée, utilisez FromJsonAsync
. Pour modifier le code client généré, nous ajustons les paramètres du générateur de code(CSharpClientGeneratorSettings
(Paramètres du générateur de clients)). Dans cet exemple, le nom de classe et l'espace de noms du code client produit sont spécifiés.
A partir du document Swagger chargé, nous construisons une instance de CSharpClientGenerator
et l'utilisons pour produire le code client(code client). Le code client créé est enregistré sur le chemin de sortie désigné. Nous répondons à toute exception ou erreur pouvant survenir au cours de la procédure, en affichant les notifications correspondantes sur la console.
NSwag peut utiliser une spécification Swagger pour générer du code client dans de nombreux langages, notamment Java, TypeScript et C#. Cela permet aux développeurs d'utiliser facilement les API dans leurs applications.
En se basant sur une spécification Swagger, NSwag peut également produire du code serveur, tel que des contrôleurs ASP.NET Core. Cela permet d'échafauder rapidement le code côté serveur pour les implémentations d'API.
Compte tenu d'une spécification Swagger, NSwag peut produire une documentation interactive de l'API, telle que Swagger UI. Cette documentation fournit une interface facile à utiliser pour explorer et tester les points d'extrémité de l'API.
Pour s'intégrer aux API basées sur SOAP, NSwag peut produire des classes de proxy. Cela permet aux programmeurs d'utiliser un code client produit pour accéder aux services SOAP à partir de leurs applications.
NSwag est capable de vérifier les spécifications Swagger pour s'assurer qu'elles respectent la norme OpenAPI/Swagger. Il est ainsi plus facile de repérer les erreurs ou les divergences dans la documentation de l'API.
Les développeurs peuvent améliorer le flux de travail pour la documentation des API en utilisant les avantages des deux technologies en intégrant NSwag avec IronPDF. Les développeurs peuvent produire une documentation d'API web .NET complète, prête à être mise en ligne, facilement disponible et partageable en utilisant NSwag pour générer des spécifications Swagger et desIronPDF pour les transformer en PDF. Les procédures suivantes font partie du processus d'intégration :
Install-Package IronPdf
Explorez et sélectionnez le package IronPDF dans les résultats de la recherche, puis cliquez sur l'option "Installer". Visual Studio se chargera du téléchargement et de l'installation en votre nom.
Pour plus d'informations concernant les fonctionnalités d'IronPDF, la compatibilité et les téléchargements disponibles, visitez le site web de l'entreprisePage IronPDF sur NuGet.
Vous pouvez également incorporer IronPDF directement dans votre projet en utilisant son fichier DLL. Pour télécharger le fichier ZIP contenant la DLL, cliquez sur le boutonLien de téléchargement IronPDF. Décompressez le fichier et ajoutez la DLL à votre projet.
Pour obtenir le fichier ZIP contenant la DLL, après l'avoir décompressé, incorporez la DLL dans votre projet.
En utilisant NSwag, les développeurs peuvent créer plus rapidement la documentation de l'API et le code client pour l'utilisation des API en utilisant CodeGeneration.CSharp
en conjonction avec IronPDF. Les étapes suivantes font partie du processus d'intégration :
Generate Client Code: Pour créer du code client C# à partir des spécifications Swagger, utilisez NSwag.CodeGeneration.CSharp
. Cette étape permet d'automatiser la création de classes et de méthodes client pour communiquer avec les points d'extrémité de l'API.
Utiliser NSwag pour obtenir des données: Pour produire de la documentation JSON à partir de spécifications Swagger, utilisez CodeGeneration.CSharp
. À ce stade, les formats de demande/réponse, les techniques d'authentification et les points d'extrémité des clients de l'API sont créés dans une documentation lisible par l'homme.
Convertir JSON en PDF: Pour convertir le résultat du code généré en un document PDF, utilisez IronPDF. À ce stade, le texte HTML est converti en un document PDF soigné, prêt à être partagé et distribué.
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()
Le code ci-dessus accède aux données extraites de l'objet résultat et ajoute les champs Date
, TemperatureF
, TemperatureC
et Summary
aux paragraphes dans une boucle. Il spécifie ensuite le chemin du fichier de sortie pour le PDF, puis informe l'utilisateur qu'un PDF a été généré avec succès.
Voici le résultat du code ci-dessus.
CodeGeneration
Les technologies NSwag telles que CSharp
et IronPDF fonctionnent bien ensemble pour rationaliser les processus de production de code client et de documentation des API. Les développeurs peuvent accélérer la création de solutions basées sur les API, automatiser la création de la documentation des API et produire des publications PDF de qualité professionnelle en intégrant ces outils dans les applications C#. NSwag.CodeGeneration.CSharp
avec IronPDF offre aux développeurs une solution complète pour documenter efficacement les API et produire du code client en C#, qu'ils développent des applications de bureau, web ou basées sur le cloud.
L'offre $749 Lite comprend une licence perpétuelle, un an de maintenance du logiciel et une mise à jour de la bibliothèque. IronPDF propose des licences gratuites avec des restrictions de redistribution et de temps. Les utilisateurs peuvent évaluer la solution pendant la période d'essai sans voir de filigrane. Pour plus d'informations sur le prix et la licence, veuillez consulter le site suivantInformations sur les licences d'IronPDF. Aller à la pagePage des bibliothèques d'Iron Software pour obtenir des informations supplémentaires sur les bibliothèques de produits d'Iron Software.
9 produits de l'API .NET pour vos documents de bureau