In uno script precedente (https://www.aspitalia.com/script/1301/Documentare-Web-API-Swagger-ASP.NET-Core-2.1.aspx), abbiamo visto come configurare Swashbuckle.AspNetCore per generare automaticamente lo swagger document della nostra API.
Quando dobbiamo supportare diverse versioni del client contemporaneamente, la tipica soluzione è quella di esporre la versione dell'API come path dell'URL: /api/v2/people.
Dato che queste API avranno verosimilmente contratti differenti, è possibile esporre diversi swagger document tramite il metodo AddSwaggerGen:
public void ConfigureServices(IServiceCollection services) { // .. altro codice qui .. services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new Info { Title = "My Sample API V1", Version = "v1" }); c.SwaggerDoc("v2", new Info { Title = "My Sample API V2", Version = "v2" }); }); }
Ognuno di questi document risponderà a uno specifico indirizzo, che possiamo registrare nella UI per generare una pagina di help per ciascuno di essi:
app.UseSwaggerUI(c => { c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1"); c.SwaggerEndpoint("/swagger/v2/swagger.json", "My API V2"); });
Swashbuckle utilizza le primitive di ApiExplorer per ispezionare il nostro codice alla ricerca di controller e action. Per specificare la versione di ciascun endpoint disponibile, è pertanto sufficiente sfruttare l'attributo ApiExplorerSettings, che può essere applicato sia a livello di controller che di action.
[Route("api/v2/people")] [ApiExplorerSettings(GroupName = "v2")] public class PeopleV2Controller : Controller { // .. altro codice qui .. }
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Eseguire query per recuperare il padre di un record che sfrutta il tipo HierarchyID in Entity Framework
Utilizzare il nuovo modello GPT-4o con Azure OpenAI
Supporto ai tipi DateOnly e TimeOnly in Entity Framework Core
Visualizzare le change sul plan di Terraform tramite le GitHub Actions
Le novità di Angular: i miglioramenti alla CLI
Triggerare una pipeline su un altro repository di Azure DevOps
Eseguire una ricerca avanzata per recuperare le issue di GitHub
Criptare la comunicazione con mTLS in Azure Container Apps
Eseguire un metodo asincrono dopo il set di una proprietà in Blazor 8
Inference di dati strutturati da testo con Semantic Kernel e ASP.NET Core Web API
Generare HTML a runtime a partire da un componente Razor in ASP.NET Core
Creare una libreria CSS universale: Clip-path