钱行慕

导航

【译】ASP.NET Core Web API文档(Swagger/OpenAPI)

原文链接:传送门

Swagger(OpenAPI)是一个语言无关的用来描述Rest API的规范。它允许计算机和人都可以理解Rest API的能力,而不用直接访问API的源代码。它的主要目标是:

  • 最小化连接解耦的服务的所需的工作量
  • 减少准确文档化一个服务所需要的时间

对于.NET平台两个主要的OpenAPI实现是 Swashbuckle 和 NSwag,请查看:

OpenAPI 与 Swagger的对比

Swagger项目在2015年被捐赠给OpenAPI倡议,此后也被称为OpenAPI。这两个名字现在几乎可以互换使用。然而,“OpenAPI”指的是规范。Swagger指的是来自于SmartBear的开源及商业产品家族,其与OpenAPI规范协同工作。后续的开源产品,例如OpenAPIGenerator,也归并到Swagger家族名称之下,尽管其不是SmartBear公司发布的。

简而言之:

  • 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提供了基于Web的UI,其使用生成的OpenAPI规范提供了关于服务的信息。Swashbuckle 和NSwag都包含了一个Swagger UI的嵌入式版本,因此其可以使用一个中间件注册调用被寄宿在你的ASP.NET Core App中。其Web UI看起来像是这样:

 

你的控制器中的各个方法都可以从UI中进行测试。选中方法名称来展开这个节点,添加任何必要的参数,然后选择Try it Out

 

 下一步/额外资源

posted on 2020-11-24 15:00  钱行慕  阅读(402)  评论(0编辑  收藏  举报