Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Av Rico Suter
Swagger (OpenAPI) är en språkagnostisk specifikation för att beskriva REST API:er. Det gör att både datorer och människor kan förstå funktionerna i ett REST API utan direkt åtkomst till källkoden. Huvudmålen är att:
- Minimera mängden arbete som krävs för att ansluta frikopplade tjänster.
- Minska den tid som krävs för att korrekt dokumentera en tjänst.
De två viktigaste OpenAPI-implementeringarna för .NET är Swashbuckle och NSwag, se:
OpenAPI jämfört med Swagger
Swagger-projektet donerades till OpenAPI Initiative 2015 och har sedan dess kallats OpenAPI. Båda namnen används omväxlande. "OpenAPI" refererar dock till specifikationen. "Swagger" avser familjen med öppen källkod och kommersiella produkter från SmartBear som fungerar med OpenAPI-specifikationen. Efterföljande produkter med öppen källkod, till exempel OpenAPIGenerator, faller också under Swagger-familjens namn, trots att de inte släpps av SmartBear.
Sammanfattningsvis:
- OpenAPI är en specifikation.
- Swagger är verktyg som använder OpenAPI-specifikationen. Till exempel OpenAPIGenerator och SwaggerUI.
OpenAPI-specifikation (openapi.json)
OpenAPI-specifikationen är ett dokument som beskriver funktionerna i ditt API. Dokumentet baseras på XML och attributanteckningar i kontrollanterna och modellerna. Det är kärnan i OpenAPI-flödet och används för att köra verktyg som SwaggerUI. Som standard heter den openapi.json. Här är ett exempel på en OpenAPI-specifikation, reducerad för korthet:
{
  "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-användargränssnitt
Swagger UI erbjuder ett webbaserat användargränssnitt som tillhandahåller information om tjänsten med hjälp av den genererade OpenAPI-specifikationen. Både Swashbuckle och NSwag innehåller en inbäddad version av Swagger-användargränssnittet, så att det kan finnas i din ASP.NET Core-app med hjälp av ett registreringsanrop för mellanprogram. Webbgränssnittet ser ut så här:
               
              
            
Varje publik åtgärdsmetod i dina kontroller kan testas från användargränssnittet. Välj ett metodnamn för att expandera avsnittet. Lägg till nödvändiga parametrar och välj Prova!.
               
              
            
Anmärkning
Swagger UI-versionen som används för skärmbilderna är version 2. Ett exempel på version 3 finns i Petstore-exempel.
Skydda Swagger UI-slutpunkter
Anropa MapSwagger().RequireAuthorization för att skydda Swagger UI-slutpunkterna. Exemplet nedan visar hur du skyddar swagger-slutpunkterna:
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);
}
I föregående kod /weatherforecast behöver slutpunkten inte auktorisering, men Swagger-slutpunkterna gör det.
Följande Curl skickar en JWT-token för att testa Swagger UI-slutpunkten:
curl -i -H "Authorization: Bearer {token}" https://localhost:{port}/swagger/v1/swagger.json
Mer information om testning med JWT-token finns i Generera token med dotnet user-jwts.
Generera en XML-dokumentationsfil vid kompileringstid.
Mer information finns i GenerateDocumentationFile .
Nästa steg
Av Rico Suter
Swagger (OpenAPI) är en språkagnostisk specifikation för att beskriva REST API:er. Det gör att både datorer och människor kan förstå funktionerna i ett REST API utan direkt åtkomst till källkoden. Huvudmålen är att:
- Minimera mängden arbete som krävs för att ansluta frikopplade tjänster.
- Minska den tid som krävs för att korrekt dokumentera en tjänst.
De två viktigaste OpenAPI-implementeringarna för .NET är Swashbuckle och NSwag, se:
OpenAPI jämfört med Swagger
Swagger-projektet donerades till OpenAPI Initiative 2015 och har sedan dess kallats OpenAPI. Båda namnen används omväxlande. "OpenAPI" refererar dock till specifikationen. "Swagger" avser familjen med öppen källkod och kommersiella produkter från SmartBear som fungerar med OpenAPI-specifikationen. Efterföljande produkter med öppen källkod, till exempel OpenAPIGenerator, faller också under Swagger-familjens namn, trots att de inte släpps av SmartBear.
Sammanfattningsvis:
- OpenAPI är en specifikation.
- Swagger är verktyg som använder OpenAPI-specifikationen. Till exempel OpenAPIGenerator och SwaggerUI.
OpenAPI-specifikation (openapi.json)
OpenAPI-specifikationen är ett dokument som beskriver funktionerna i ditt API. Dokumentet baseras på XML och attributanteckningar i kontrollanterna och modellerna. Det är kärnan i OpenAPI-flödet och används för att köra verktyg som SwaggerUI. Som standard heter den openapi.json. Här är ett exempel på en OpenAPI-specifikation, reducerad för korthet:
{
  "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-användargränssnitt
Swagger UI erbjuder ett webbaserat användargränssnitt som tillhandahåller information om tjänsten med hjälp av den genererade OpenAPI-specifikationen. Både Swashbuckle och NSwag innehåller en inbäddad version av Swagger-användargränssnittet, så att det kan finnas i din ASP.NET Core-app med hjälp av ett registreringsanrop för mellanprogram. Webbgränssnittet ser ut så här:
               
              
            
Varje publik åtgärdsmetod i dina kontroller kan testas från användargränssnittet. Välj ett metodnamn för att expandera avsnittet. Lägg till nödvändiga parametrar och välj Prova!.
               
              
            
Anmärkning
Swagger UI-versionen som används för skärmbilderna är version 2. Ett exempel på version 3 finns i Petstore-exempel.
Nästa steg
ASP.NET Core