christianhelle / apiclientcodegen

A collection of Visual Studio custom tool code generators for Swagger / OpenAPI specification files
http://bit.ly/restapicodegen
GNU General Public License v3.0
165 stars 20 forks source link
api-client autorest code-generator kiota nswag openapi openapi-generator openapi-specification openapi3 rest-client swagger swagger-codegen-cli visual-studio-extension visual-studio-mac-extension

Build status CLI Tool VSIX VS Mac Smoke Tests

Maintainability Rating Reliability Rating Security Rating Bugs Vulnerabilities Code Smells Coverage

Version Downloads Rating Downloads Rating NuGet

buymeacoffee Join the chat at https://gitter.im/apiclientcodegen/community

REST API Client Code Generator

A collection of Visual Studio C# custom tool code generators for Swagger / OpenAPI specification files

Download

Features

Custom Tools

Custom tools let you associate a tool with an item in a project and run that tool whenever the file is saved

Dependencies

The custom tool code generators piggy back on top of well known Open API client code generators like AutoRest, NSwag, OpenAPI Generator, Microsoft Kiota, Refitter, and Swagger Codegen CLI. These tools require NPM and the Java Runtime Environment to be installed on the developers machine. Alternative Java SDK implementations such as the OpenJDK works fine with this extension. By default, the path to java.exe is read from the JAVA_HOME environment variable, but is also configurable in the Settings screen. Future versions of the extension will include the OpenJDK in the VSIX package

The Swagger Codegen CLI and OpenAPI Generator are distributed as JAR files and are downloaded on demand but requires the Java SDK to be installed on the machine. AutoRest is installed on-demand via NPM as a global tool and uses the latest available version. Microsoft Kiota is installed on-demand as a .NET Tool and requires .NET 7.0. This means that using these custom tools have an initial delay upon first time use.

NSwagStudio is stand alone UI tool for editing a .nswag specification file for generating code. This tool is optional to install and official installation instructions are available on the NSwag Wiki on Github. If NSwagStudio is not installed on the machine then the Visual Studio Extension will install the NSwag CLI via NPM as a global tool using the latest available version.

The NSwag code generator produces code that depends on the Newtonsoft.Json NuGet package

The Refitter code generator produces code that depends on the Refit NuGet package

The OpenAPI Generator code generator produces code that depends on the following NuGet packages:

The project Kiota code generator produces code that depends on the following NuGet packages

The Swagger Codegen CLI code generator produces code that depends on the RestSharp and JsonSubTypes NuGet packages

The AutoRest code generator produces code that depends on the Microsoft.Rest.ClientRuntime and Newtonsoft.Json NuGet packages

This Visual Studio Extension will automatically add the required NuGet packages that the generated code depends on

Screenshots

Add - API Client from OpenAPI Specification

Enter URL to OpenAPI Specification

Solution Explorer Context Menus

NSwag Studio Context Menu

Refitter Context Menu

Kiota Context Menu

Settings

This extension will by default make some assumptions on the installation paths for Java, NSwag and NPM but also provides option pages for configuring this. The Swagger Codegen CLI and the OpenAPI Generator JAR files are by default downloaded to the user TEMP folder but it is also possible to specify to use existing JAR files

Options - General

Supports customising how AutoRest generates code based on the C# generator settings that the AutoRest CLI tool provides

Options - AutoRest

Supports customising how NSwag generates code using the properties exposed by the NSwag NuGet package

Options - NSwag

Supports customising how the .nswag file is generated using a subset of the options available in NSwag Studio

Options - NSwag Studio

Supports customising how OpenAPI Generator generates code using the additional optional properties that the OpenAPI Generator CLI tool provides

Options - OpenAPI Generator

Supports customising how Refitter generates the Refit interface. This allows you to configure whether to return the type directly or wrap it inside an IApiResponse<T>. You can also disable generating contracts or XML doc style comments

Options - Refitter

Supports allowing Kiota to generate multiple files

Options - Kiota

This extension collects errors and tracks feature usages to a service called Exceptionless and Azure Application Insights. This is done anonymously using a support key and a generated anonymous identity based on a secure hash of username@host

Options - Analytics

MacOS

Add - API Client from OpenAPI Specification

Enter URL to OpenAPI Specification

Solution Explorer Context Menus

NSwag Studio Context Menu

Installation

The Visual Studio extension can be installed directly from Visual Studio 2019 and 2022 via the Extensions Dialog Box. The process is best described in the official Microsoft documentation for Managing extensions for Visual Studio

Visual Studio for Mac

This installation process for Visual Studio for Mac is currently a bit troublesome as the MonoDevelop Addin Repository is currently not accepting new users so I can't really register and setup my extension.

There are 2 ways of installing my extension on Visual Studio for Mac: Adding a custom extension repository or Installing the .mpack file directly from the Extensions Manager

Adding a new extension repository

Here's what you need to do:

Open Extensions Dialog Box

Manage Repositories

Manage Repositories

Add Repository

Add Repository Dialog

Added Repository

Add Repository

Add Repository

Add Repository

Installing the .mpack file directly

Here's what you need to do:

Open Extensions Dialog Box

Manually install .mpack file

Confirm .mpack file install

Manually uninstall Add-in

Cross Platform Command Line Tool

All custom tools mentioned above are also implemented in a cross platform command line application

Requirements

Installation

The tool can be installed as a .NET Core global tool that you can call from the shell / command line

dotnet tool install --global rapicgen

or by following the instructions here to install a specific version of tool

Usage

Since the tool is published as a .NET Core Tool, it can be launched from anywhere using any command line interface by calling rapicgen. The help information is displayed when not specifying any arguments to rapicgen

Usage: rapicgen [command] [options]

Options:
  -v|--verbose       Show verbose output
  -?|-h|--help       Show help information.

Commands:
  csharp             Generate C# API clients
  jmeter             Generate Apache JMeter test plans
  openapi-generator  Generate code using OpenAPI Generator (v7.7.0).
                     See supported generators at https://openapi-generator.tech/docs/generators/
  typescript         Generate TypeScript API clients

Run 'rapicgen [command] -?|-h|--help' for more information about a command.

Some help information is also provided per command and can be launched by

rapicgen [command name] -?

or

rapicgen [command name] [sub command name] -?

For example:

rapicgen csharp -?

will output this:

Generate C# API clients

Usage: rapicgen csharp [command] [options]

Options:
  -?|-h|--help  Show help information.

Commands:
  autorest      AutoRest (v3.0.0-beta.20210504.2)
  kiota         Microsoft Kiota (v1.16.0)
  nswag         NSwag (v14.1.0)
  openapi       OpenAPI Generator (v7.7.0)
  refitter      Refitter (v1.1.3)
  swagger       Swagger Codegen CLI (v3.0.34)

Run 'csharp [command] -?|-h|--help' for more information about a command.

and

rapicgen csharp autorest -?

will output this:

Generate Swagger / Open API client using AutoRest

Usage: run autorest [options] <swaggerFile> <namespace> <outputFile>

Arguments:
  swaggerFile   Path to the Swagger / Open API specification file
  namespace     Default namespace to in the generated code
  outputFile    Output filename to write the generated code to. Default is the swaggerFile .cs

Options:
  -?|-h|--help  Show help information

or

rapicgen typescript -?

will output this:

Generate TypeScript API client

Usage: rapicgen typescript [options] <generator> <swaggerFile> <outputPath>

Arguments:
  generator         The tech stack to use for the generated client library
                    Allowed values are: Angular, Aurelia, Axios, Fetch, Inversify, JQuery, NestJS, Node, ReduxQuery,
                    Rxjs.
                    Default value is: Angular.
  swaggerFile       Path to the Swagger / Open API specification file
  outputPath        Output folder to write the generated code to
                    Default value is: typescript-generated-code.

Options:
  -nl|--no-logging  Disables Analytics and Error Reporting
  -?|-h|--help      Show help information.

Usage Examples:

Let's say we have a OpenAPI Specifications document called Swagger.json

For starters, we can use the Swagger Petstore spec. Here's an example powershell script for downloading it

Invoke-WebRequest -Uri https://petstore.swagger.io/v3/swagger.json -OutFile Swagger.json

In case you don't have the CLI tool installed you can install it by

dotnet tool install --global rapicgen

Here's an example of how to generate code using AutoRest

rapicgen csharp autorest Swagger.json GeneratedCode ./AutoRestOutput.cs

Here's an example of how to generate code using Kiota

rapicgen csharp kiota Swagger.json GeneratedCode ./OpenApiOutput.cs

Here's an example of how to generate code using NSwag

rapicgen csharp nswag Swagger.json GeneratedCode ./NSwagOutput.cs

Here's an example of how to generate code using Swagger Codegen CLI

rapicgen csharp swagger Swagger.json GeneratedCode ./SwaggerOutput.cs

Here's an example of how to generate code using OpenAPI Generator

rapicgen csharp openapi Swagger.json GeneratedCode ./OpenApiOutput.cs

Here's an example of how to generate code JMeter test plans

rapicgen jmeter Swagger.json

Here's an example of how to generate code for TypeScript

rapicgen typescript Angular Swagger.json

#

For tips and tricks on software development, check out my blog

If you find this useful and feel a bit generous then feel free to buy me a coffee ☕