使用 Swagger / OpenAPI ASP.NET Core Web API 檔
作者:Christoph Nienaber 和 Rico Suter
Swagger (OpenAPI) 是描述 API 的語言無關規格 REST 。 它可讓電腦和人類瞭解 API 的功能 REST ,而不需要直接存取原始程式碼。 其主要目標是:
- 將連線分離服務所需的工作量降到最低。
- 減少正確記錄服務所需的時間量。
.NET 的兩個主要 OpenAPI 實作是 Swashbuckle 和 NSwag,請參閱:
OpenApi 與 Swagger
Swagger 專案已于 2015 年與 OpenAPI 方案一同參與,自此稱為 OpenAPI。 這兩個名稱會交替使用。 不過,「OpenAPI」 是指規格。 「Swagger」 是指適用于 OpenAPI 規格之 SmartBear 的開放原始碼和商業產品系列。 除了 SmartBear 未發行,後續的開放原始碼產品,例如 OpenAPIGenerator也屬於 Swagger 系列名稱。
簡言之:
- OpenAPI 是規格。
- Swagger 是使用 OpenAPI 規格的工具。 例如,OpenAPIGenerator 和 SwaggerUI。
openAPI 規格 (openapi.json)
OpenAPI 規格是描述 API 功能的檔。 檔是以控制器和模型內的 XML 和屬性批註為基礎。 這是 OpenAPI 流程的核心部分,可用來驅動 SwaggerUI 之類的工具。 根據預設,其名稱為 openapi.json 。 以下是 OpenAPI 規格的範例,為了簡潔起見而減少:
{
"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 會使用產生的 OpenAPI 規格,提供服務相關資訊的 Web 型 UI。 Swashbuckle 和 NSwag 都包含內嵌的 Swagger UI 版本,因此它可以使用中介軟體的登錄呼叫裝載在 ASP.NET Core 應用程式中。 Web UI 顯示如下:

控制器中的每個公用動作方法都可以從 UI 進行測試。 選取方法名稱以展開 區段。 新增任何必要的參數,然後選取 [ 試用!]。

注意
用於螢幕擷取畫面的 Swagger UI 版本為第 2 版。 如需第 3 版的範例,請參閱 Petstore 範例。