带有 Swagger/OpenAPI 的 ASP.NET Core Web API 帮助页ASP.NET Core web API help pages with Swagger / OpenAPI

本文内容

作者:Christoph NienaberRico Suter

使用 Web API 时,了解其各种方法对开发人员来说可能是一项挑战。Swagger 也称为OpenAPI,解决了为 Web API 生成有用文档和帮助页的问题。它具有诸如交互式文档、客户端 SDK 生成和 API 可发现性等优点。

本文展示了 Swashbuckle.AspNetCoreNSwag .NET Swagger 实现:

  • Swashbuckle.AspNetCore 是一个开源项目,用于生成 ASP.NET Core Web API 的 Swagger 文档。

  • NSwag 是另一个用于生成 Swagger 文档并将 Swagger UIReDoc 集成到 ASP.NET Core Web API 中的开源项目。此外,NSwag 还提供了为 API 生成 C# 和 TypeScript 客户端代码的方法。

什么是 Swagger/OpenAPI?What is Swagger / OpenAPI?

Swagger 是一个与语言无关的规范,用于描述 REST API。Swagger 项目已捐赠给 OpenAPI 计划,现在它被称为开放 API。这两个名称可互换使用,但 OpenAPI 是首选。它允许计算机和人员了解服务的功能,而无需直接访问实现(源代码、网络访问、文档)。其中一个目标是尽量减少连接取消关联的服务所需的工作量。另一个目标是减少准确记录服务所需的时间。

Swagger 规范 (swagger.json)Swagger specification (swagger.json)

Swagger 流的核心是 Swagger 规范,默认情况下是名为 swagger.json 的文档 。它由 Swagger 工具链(或其第三方实现)根据你的服务生成。它描述了 API 的功能以及使用 HTTP 对其进行访问的方式。它驱动 Swagger UI,并由工具链用来启用发现和客户端代码生成。下面是为简洁起见而缩减的 Swagger 规范的示例:

  1. {
  2. "swagger": "2.0",
  3. "info": {
  4. "version": "v1",
  5. "title": "API V1"
  6. },
  7. "basePath": "/",
  8. "paths": {
  9. "/api/Todo": {
  10. "get": {
  11. "tags": [
  12. "Todo"
  13. ],
  14. "operationId": "ApiTodoGet",
  15. "consumes": [],
  16. "produces": [
  17. "text/plain",
  18. "application/json",
  19. "text/json"
  20. ],
  21. "responses": {
  22. "200": {
  23. "description": "Success",
  24. "schema": {
  25. "type": "array",
  26. "items": {
  27. "$ref": "#/definitions/TodoItem"
  28. }
  29. }
  30. }
  31. }
  32. },
  33. "post": {
  34. ...
  35. }
  36. },
  37. "/api/Todo/{id}": {
  38. "get": {
  39. ...
  40. },
  41. "put": {
  42. ...
  43. },
  44. "delete": {
  45. ...
  46. },
  47. "definitions": {
  48. "TodoItem": {
  49. "type": "object",
  50. "properties": {
  51. "id": {
  52. "format": "int64",
  53. "type": "integer"
  54. },
  55. "name": {
  56. "type": "string"
  57. },
  58. "isComplete": {
  59. "default": false,
  60. "type": "boolean"
  61. }
  62. }
  63. }
  64. },
  65. "securityDefinitions": {}
  66. }

Swagger UISwagger UI

Swagger UI 提供了基于 Web 的 UI,它使用生成的 Swagger 规范提供有关服务的信息。Swashbuckle 和 NSwag 均包含 Swagger UI 的嵌入式版本,因此可使用中间件注册调用将该嵌入式版本托管在 ASP.NET Core 应用中。Web UI 如下所示:

Swagger UI

控制器中的每个公共操作方法都可以从 UI 中进行测试。单击方法名称可以展开该部分。添加所有必要的参数,然后单击“试试看!” 。

示例 Swagger GET 测试

备注

用于屏幕截图的 Swagger UI 版本是版本 2。有关版本 3 的示例,请参阅 Petstore 示例

后续步骤Next steps