AIDE .NET

C# (Comment ça marche pour les développeurs)

Publié juin 6, 2024
Partager:

Introduction

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.

Comment utiliser NSwag en C

  1. Créer une API web reposante à l'aide de Swagger UI.

  2. Créez une application console en C#.

  3. Installer la bibliothèque NSwag.

  4. Importer l'espace de noms et créer l'objet.

  5. Traiter le code Swagger JSON vers C#.

  6. Exécutez le code et affichez le résultat.

Comprendre NSwag

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.

Caractéristiques de NSwag

Production des spécifications de Swagger

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.

Connectivité avec les projets .NET

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.

Personnalisation et expansion

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.

Démarrer avec NSwag

Configuration de NSwag dans une application console C

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.

NSwag C#(Comment ça marche pour les développeurs) : Figure 1 - Rechercher NSwag dans le gestionnaire de paquets de Visual Studio et l'installer

Mise en œuvre de NSwag dans Windows Console et Forms

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.

Exemple C# de NSwag

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
VB   C#

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 C#(Comment ça marche pour les développeurs) : Figure 2 - Sortie de la console à partir du code ci-dessus

Opération NSwag

Génération du code client

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.

Générer le code du serveur

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.

Produire une documentation interactive sur l'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.

Production de classes de mandataires

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.

Vérification des spécifications Swagger

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.

Intégration de NSwag avec IronPDF

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 :

Installer IronPDF

  • Démarrer le projet Visual Studio.
  • Choisissez "Outils" > "NuGet Package Manager" > "Console du gestionnaire de paquets".
  • Ouvrez votre invite de commande et dans la console du gestionnaire de paquets, tapez la commande suivante :
Install-Package IronPdf
  • Vous pouvez également installer IronPDF à l'aide de NuGet Package Manager for Solutions.
  • 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.

    NSwag C#(Comment ça marche pour les développeurs) : Figure 3 - Installez IronPdf à l'aide de la solution Gérer les packages NuGet en recherchant IronPdf dans la barre de recherche du gestionnaire de packages NuGet, puis sélectionnez le projet et cliquez sur le bouton Installer.

  • NuGet installera le paquetage IronPDF et toutes les dépendances nécessaires à votre projet.
  • Après l'installation, IronPDF peut être utilisé pour votre projet.

Installation via le site Web de NuGet

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.

Utiliser la DLL pour l'installation

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.

Mise en œuvre de la logique

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 :

  1. 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.

  2. 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.

  3. 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é.

  4. Améliorer la documentation PDF: Ajoutez plus de contenu à la documentation PDF en utilisant IronPDF, comme des en-têtes, des pieds de page, des filigranes ou une image de marque unique. Cette étape permet aux développeurs de personnaliser l'aspect et la marque de la documentation PDF en fonction de leurs goûts.
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()
VB   C#

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.

NSwag C#(Comment ça marche pour les développeurs) : Figure 4 - Exemple de sortie du code ci-dessus

Conclusion

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.

< PRÉCÉDENT
Dapper C# (Comment ça marche pour les développeurs)
SUIVANT >
Flunt C# (Comment ça marche pour les développeurs)