RicoSuter / NSwag

The Swagger/OpenAPI toolchain for .NET, ASP.NET Core and TypeScript.
http://NSwag.org
MIT License
6.74k stars 1.29k forks source link

Nswag Asp net core 13.13.2 Generate Typescript client for each API version #3836

Open KTomislav opened 2 years ago

KTomislav commented 2 years ago

I have automatic generation of typescript client while building NET.Core C# code

This is my configuration in Startup.cs ConfigureServices

        services.AddApiVersioning(config => {
            config.DefaultApiVersion = new ApiVersion(1, 0);
            config.AssumeDefaultVersionWhenUnspecified = true;
            config.ReportApiVersions = true;
            config.ApiVersionReader = new UrlSegmentApiVersionReader();
        });
        services.AddVersionedApiExplorer(config =>
        {
            config.AddApiVersionParametersWhenVersionNeutral = true;
            config.GroupNameFormat = "'v'VVV";
        });

          var versions = ApiVersionExtensions.GetActualVersions();
        foreach (var version in versions)
        {
            services.AddOpenApiDocument(configure =>
            {
                configure.Title = "API";
                configure.DocumentName = $"v{version}";
                configure.ApiGroupNames = new[] { $"v{version}" };
                configure.PostProcess = document =>
                {
                    document.Info.Version = $"v{version}";
                };
            });
        }

And in Configure

        app.UseOpenApi();
        app.UseSwaggerUi3(settings => {
            settings.Path = "/api";
            settings.EnableTryItOut = true;
            var versions = ApiVersionExtensions.GetActualVersions();
            foreach (var version in versions)
            {
                settings.SwaggerRoutes.Add(new NSwag.AspNetCore.SwaggerUi3Route($"v{version}", $"/swagger/v{version}/swagger.json"));
            }
        });

When displays two version when running swagger in web browser, each version contains API methods. However, when generating typescript client

"typeScriptVersion": 2.7, "template": "Axios",

It generates interface IClient containing only methods from API endpoints in version v1. Methods from API endpoints marked as v2 are ignored. What I want is to get either all methods from all existing API versions or somehow generate different typescript Client for each version, for example Client1 and Client2

Is it possible something like that, so I don't have to manually add method when raising API version

bahtiyarozdere commented 1 year ago

Hello, I am working on a similar approach and could not figure out to generate typescript client yet. I am facing some errors. Can you share the part where typescript client generation happens if possible?