Click here to Skip to main content
15,116,815 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
I'm creating automatic type-safe REST API (Refit) from Swagger document. I'm Creating Interface and model class manually like below.

I'm having huge number of Swagger files. So I want to do this dynamically, Please help me if anyone know.

What I have tried:

I'm Creating Interface and model class manually like below.
Swagger file:
<pre>"paths": {
"/configuration/v1/devices/{device_serial}": {
      "get": {
        "tags": [
          "Devices"
        ],
        "summary": "Get variablised template for a Switch.",
        "description": " Response information.",
        "x-deployed": true,
        "operationId": "api.devices.get_device",
        "produces": [
          "multipart/form-data"
        ],
        "parameters": [
          {
            "in": "path",
            "name": "device_serial",
            "description": "Serial number of the device.",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
           "200": {
            "description": "Successful operation.",
            "schema": {
              "type": "object",
              "properties": {
                "total": {
                  "type": "integer"
                },
                "data": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    }
}

Interface code:
/// <summary>
        /// Get variablised template for a Switch.
        /// </summary>
        /// <remarks>Response information</remarks>
        /// <exception cref="Swagger.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="deviceSerial"></param>
        /// <param name="cancellationToken"></param>
        /// <returns>Task of String</returns>
        [Get("/configuration/v1/devices/{device_serial}")]
        Task<DevicesResponse> GetDeviceVariabilisedTemplateAsync(
            [AliasAs("device_serial")] string deviceSerial,
            CancellationToken cancellationToken = default);

Model Class:
[DataContract]
    public class DevicesResponse
    {
        [DataMember(Name = "total", EmitDefaultValue = false)]
        public int? Total { get; set; } = default!;

        [DataMember(Name = "data", EmitDefaultValue = false)]
        public string? Data { get; set; } = default!;
    }
Posted
Updated 5-Jul-21 4:16am

1 solution

A quick Google showed up Swagger Codegen | Swagger[^] which can be used to generate models from OpenAPI specifications. Apparently it's open source and free to use as well, so might accomplish what you're looking for.

Also the OpenAPI itself has a repository for generation tools: OpenAPITools/openapi-generator[^] which might also be a viable option. All I had to search for was "C# build models from Swagger"
   

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)




CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900