Dokumentace k webovému rozhraní API ASP.NET Core s využitím Swaggeru/OpenAPI

Poznámka:

Toto není nejnovější verze tohoto článku. Aktuální verzi najdete ve verzi .NET 8 tohoto článku.

Důležité

Tyto informace se týkají předběžného vydání produktu, který může být podstatně změněn před komerčním vydáním. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.

Aktuální verzi najdete ve verzi .NET 8 tohoto článku.

Autor: Christopher Nienaber a Rico Suter

Swagger (OpenAPI) je specifikace nezávislá na jazyce pro popis REST rozhraní API. Umožňuje počítačům i lidem pochopit možnosti REST rozhraní API bez přímého přístupu ke zdrojovému kódu. Jeho hlavními cíli jsou:

  • Minimalizujte množství práce potřebné k propojení oddělených služeb.
  • Zkraťte dobu potřebnou k přesnému zdokumentování služby.

Dvě hlavní implementace OpenAPI pro .NET jsou Swashbuckle a NSwag, viz:

OpenAPI vs. Swagger

Projekt Swagger byl darován iniciativě OpenAPI v roce 2015 a od té doby se označuje jako OpenAPI. Oba názvy se používají zaměnitelně. OpenAPI ale odkazuje na specifikaci. "Swagger" odkazuje na řadu opensourcových a komerčních produktů z SmartBear, které pracují se specifikací OpenAPI. Další opensourcové produkty, jako je OpenAPIGenerator, spadají také pod název rodiny Swagger, i když ho SmartBear nevyvolá.

Stručně řečeno:

  • OpenAPI je specifikace.
  • Swagger je nástroje, které používají specifikaci OpenAPI. Například OpenAPIGenerator a SwaggerUI.

Specifikace OpenAPI (openapi.json)

Specifikace OpenAPI je dokument, který popisuje možnosti vašeho rozhraní API. Dokument je založený na anotách XML a atributů v rámci kontrolerů a modelů. Je to základní část toku OpenAPI a slouží k řízení nástrojů, jako je SwaggerUI. Ve výchozím nastavení se jmenuje openapi.json. Tady je příklad specifikace OpenAPI, která se zmenší pro stručnost:

{
  "openapi": "3.0.1",
  "info": {
    "title": "API V1",
    "version": "v1"
  },
  "paths": {
    "/api/Todo": {
      "get": {
        "tags": [
          "Todo"
        ],
        "operationId": "ApiTodoGet",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ToDoItem"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ToDoItem"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ToDoItem"
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        …
      }
    },
    "/api/Todo/{id}": {
      "get": {
        …
      },
      "put": {
        …
      },
      "delete": {
        …
      }
    }
  },
  "components": {
    "schemas": {
      "ToDoItem": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "format": "int32"
          },
          "name": {
            "type": "string",
            "nullable": true
          },
          "isCompleted": {
            "type": "boolean"
          }
        },
        "additionalProperties": false
      }
    }
  }
}

Swagger UI

Swagger UI nabízí webové uživatelské rozhraní , které poskytuje informace o službě pomocí vygenerované specifikace OpenAPI. Swashbuckle i NSwag zahrnují vloženou verzi uživatelského rozhraní Swaggeru, aby ji bylo možné hostovat ve vaší aplikaci ASP.NET Core pomocí volání registrace middlewaru. Webové uživatelské rozhraní vypadá takto:

Swagger UI

Jednotlivé metody veřejné akce v kontrolerů je možné testovat z uživatelského rozhraní. Výběrem názvu metody rozbalte oddíl. Přidejte všechny potřebné parametry a vyberte Vyzkoušet!.

Příklad testu Swagger GET

Poznámka:

Verze uživatelského rozhraní Swaggeru používaná pro snímky obrazovky je verze 2. Příklad verze 3 najdete v příkladu Petstore.

Zabezpečení koncových bodů uživatelského rozhraní Swagger

Volání MapSwagger().RequireAuthorization pro zabezpečení koncových bodů uživatelského rozhraní Swagger Následující příklad zabezpečuje koncové body swaggeru:

using System.Security.Claims;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();

builder.Services.AddAuthorization();
builder.Services.AddAuthentication("Bearer").AddJwtBearer();

var app = builder.Build();

  if (app.Environment.IsDevelopment())
  {
    app.UseSwagger();
    app.UseSwaggerUI();
  }

app.UseHttpsRedirection();

var summaries = new[]
{
    "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
};

app.MapSwagger().RequireAuthorization();

app.MapGet("/", () => "Hello, World!");
app.MapGet("/secret", (ClaimsPrincipal user) => $"Hello {user.Identity?.Name}. My secret")
    .RequireAuthorization();

app.MapGet("/weatherforecast", () =>
{
    var forecast = Enumerable.Range(1, 5).Select(index =>
        new WeatherForecast
        (
            DateOnly.FromDateTime(DateTime.Now.AddDays(index)),
            Random.Shared.Next(-20, 55),
            summaries[Random.Shared.Next(summaries.Length)]
        ))
        .ToArray();
    return forecast;
})
.WithName("GetWeatherForecast")
.WithOpenApi();

app.Run();

internal record WeatherForecast(DateOnly Date, int TemperatureC, string? Summary)
{
    public int TemperatureF => 32 + (int)(TemperatureC / 0.5556);
}

V předchozím kódu /weatherforecast koncový bod nepotřebuje autorizaci, ale koncové body Swaggeru se dělají.

Následující curl předá token JWT k otestování koncového bodu uživatelského rozhraní Swagger:

curl -i -H "Authorization: Bearer {token}" https://localhost:{port}/swagger/v1/swagger.json

Další informace o testování pomocí tokenů JWT najdete v tématu Generování tokenů pomocí dotnet user-jwts.

Vygenerujte soubor dokumentace XML v době kompilace.

Další informace najdete v souboru GenerateDocumentationFile .

Další kroky

Autor: Christopher Nienaber a Rico Suter

Swagger (OpenAPI) je specifikace nezávislá na jazyce pro popis REST rozhraní API. Umožňuje počítačům i lidem pochopit možnosti REST rozhraní API bez přímého přístupu ke zdrojovému kódu. Jeho hlavními cíli jsou:

  • Minimalizujte množství práce potřebné k propojení oddělených služeb.
  • Zkraťte dobu potřebnou k přesnému zdokumentování služby.

Dvě hlavní implementace OpenAPI pro .NET jsou Swashbuckle a NSwag, viz:

OpenAPI vs. Swagger

Projekt Swagger byl darován iniciativě OpenAPI v roce 2015 a od té doby se označuje jako OpenAPI. Oba názvy se používají zaměnitelně. OpenAPI ale odkazuje na specifikaci. "Swagger" odkazuje na řadu opensourcových a komerčních produktů z SmartBear, které pracují se specifikací OpenAPI. Další opensourcové produkty, jako je OpenAPIGenerator, spadají také pod název rodiny Swagger, i když ho SmartBear nevyvolá.

Stručně řečeno:

  • OpenAPI je specifikace.
  • Swagger je nástroje, které používají specifikaci OpenAPI. Například OpenAPIGenerator a SwaggerUI.

Specifikace OpenAPI (openapi.json)

Specifikace OpenAPI je dokument, který popisuje možnosti vašeho rozhraní API. Dokument je založený na anotách XML a atributů v rámci kontrolerů a modelů. Je to základní část toku OpenAPI a slouží k řízení nástrojů, jako je SwaggerUI. Ve výchozím nastavení se jmenuje openapi.json. Tady je příklad specifikace OpenAPI, která se zmenší pro stručnost:

{
  "openapi": "3.0.1",
  "info": {
    "title": "API V1",
    "version": "v1"
  },
  "paths": {
    "/api/Todo": {
      "get": {
        "tags": [
          "Todo"
        ],
        "operationId": "ApiTodoGet",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ToDoItem"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ToDoItem"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ToDoItem"
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        …
      }
    },
    "/api/Todo/{id}": {
      "get": {
        …
      },
      "put": {
        …
      },
      "delete": {
        …
      }
    }
  },
  "components": {
    "schemas": {
      "ToDoItem": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "format": "int32"
          },
          "name": {
            "type": "string",
            "nullable": true
          },
          "isCompleted": {
            "type": "boolean"
          }
        },
        "additionalProperties": false
      }
    }
  }
}

Swagger UI

Swagger UI nabízí webové uživatelské rozhraní , které poskytuje informace o službě pomocí vygenerované specifikace OpenAPI. Swashbuckle i NSwag zahrnují vloženou verzi uživatelského rozhraní Swaggeru, aby ji bylo možné hostovat ve vaší aplikaci ASP.NET Core pomocí volání registrace middlewaru. Webové uživatelské rozhraní vypadá takto:

Swagger UI

Jednotlivé metody veřejné akce v kontrolerů je možné testovat z uživatelského rozhraní. Výběrem názvu metody rozbalte oddíl. Přidejte všechny potřebné parametry a vyberte Vyzkoušet!.

Příklad testu Swagger GET

Poznámka:

Verze uživatelského rozhraní Swaggeru používaná pro snímky obrazovky je verze 2. Příklad verze 3 najdete v příkladu Petstore.

Další kroky