与 SwaggerHub API 集成

  2015 年 10 月 22 日

作者:Ole Lensmar

为了我们不断努力推广 Swagger,Swagger 团队最近推出了 SwaggerHub,这是一种在线服务,它将核心 Swagger 工具(UI、编辑器、代码生成器、验证器)集成到一个协作平台中,旨在使 Swagger 及其工具的入门更加容易。在本文中,我将重点介绍 SwaggerHub 公开的相应 API,该 API 允许您在 SwaggerHub 注册表中搜索、检索、创建和更新 Swagger 定义。这使您可以

  • 将 SwaggerHub 中的 Swagger 定义的搜索和检索集成到现有的 API 工具中
  • 将 Swagger 定义直接保存到 SwaggerHub

SwaggerHub API 可在 https://app.swaggerhub.com/apis/swagger-hub/registry-api/ 上获得,其 Swagger 2.o 定义可在 https://swaggerhub.com/api/swagger-hub/registry-api 上获得。

SwaggerHub API 标识符

在我们深入了解 API 本身之前,让我们快速看一下 SwaggerHub 如何识别 API - 因为此“方案”在 API 和 SwaggerHub 本身中都被广泛使用。

SwaggerHub 中的每个 Swagger 定义都由以下值标识

  • owner - 拥有 API 的帐户
  • api - 所有者帐户下 API 的唯一标识符
  • version - 唯一的版本标识符

在 API 和 SwaggerHub 应用程序中,这些都按上述顺序组合为路径段,这使您可以使用以下任一方式直接链接到 SwaggerHub 上的 API 及其 API

https://swaggerhub.com/api/{owner}/{api}/{version}

https://api.swaggerhub.com/apis/{owner}/{api}/{version}

对于 SwaggerHub API,这些端点是

如果省略末尾的版本,您将得到略有不同的结果

  • Web 版本将显示 API 的默认版本(可在 API 设置中配置)
  • API 版本将返回 API 所有版本的 apis.json 列表

apis.json

对 SwaggerHub API 的许多 GET 调用以 apis.json 格式返回 API 列表。例如,https://api.swaggerhub.com/apis/swagger-hub/registry-api 将返回 SwaggerHub API 的所有版本列表。您可以在 apisjson.org 网站上阅读有关 apis.json 格式的信息。上面列表中的每个项目都包含许多特定于 SwaggerHub 的自定义“X-??”属性

  • X-Version:SwaggerHub 中相应 API 的版本
  • X-Created:该版本在 SwaggerHub 中创建的时间
  • X-Modified:该版本在 SwaggerHub 中最后修改的时间
  • X-Published:此 API 版本是否已在 SwaggerHub 上“发布”(表示它处于最终状态)

对于此特定列表,您应该在结果中获得(在撰写本文时)3 个项目;版本 1.0.0、1.0.1 和 1.0.2 - 以及相应的元数据。

身份验证

SwaggerHub API 公开的大多数资源不需要身份验证令牌 - 目前唯一需要的是对 /apis/{owner}/{api} 的 POST,它创建/更新指定的版本(稍后详细介绍)。要进行此调用,您需要提供包含 API 密钥的“Authorization”HTTP 标头,该 API 密钥可以通过 SwaggerHub UI 获得,使用以下步骤

  • 在右上角的菜单中选择设置
  • 选择左侧的 API 密钥
  • 单击创建 API 密钥

apikey

此密钥不仅允许您在您的帐户下发布新的/更新的 API,还将在搜索和 API 列表中添加一些额外功能

  • 一个额外的 X-UserRole apis.json 属性,指示经过身份验证的用户对于特定 API 具有什么角色(所有者、编辑、查看)
  • 可以指定 filter=user 作为 API 搜索调用的查询参数,这将仅返回经过身份验证的用户有权访问的 API,作为所有者或协作者(X-UserRole 属性将为“所有者”或“编辑”)

搜索 SwaggerHub 注册表

好的 - 让我们直奔主题 - SwaggerHub API 的基本资源位于 https://api.swaggerhub.com/apis

此资源将返回 SwaggerHub 注册表中所有公共 API 的分页列表(在撰写本文时,所有 API 都是公共的 - 但这种情况肯定会在不久的将来发生变化)。如 Swagger 定义所示,有许多查询参数可用于筛选

  • query:搜索所有 API 的所有者、名称、swagger.info.title 和 swagger.info.description
  • tag:仅返回带有指定标签的 API
  • state:仅返回具有指定状态的 API
  • page 和 limit:分页
  • sort 和 order:排序和排序 (!)

因此,例如,如果您想查找已发布的财务 API,您将调用

在撰写本文时,它返回一个 API - 太棒了!

如果您想将搜索范围缩小到仅限特定所有者的 API,请按照 swagger.json 中的描述将其添加到路径中

您可能会注意到,您从上面的 API 调用中得到的结果与您在 SwaggerHub UI 中看到的结果完全相同,这仅仅是因为 SwaggerHub 在幕后对所有 API 搜索/检索/更新功能使用相同的 API。

搜索结果中的 API 版本

如您所见,每个 {owner}/{api} 仅返回一个条目 - 您不会获得该 API 每个版本的条目。API 的默认版本在 X-Version apis.json 属性中返回,同时在 Swagger 属性中提供指向其 swagger.json 的链接。此外,还会添加 X-Versions 属性,其中包含该 API 所有版本的逗号分隔列表;已发布的版本以星号为前缀。

例如,fehguy 的家庭自动化项目在上面的列表中具有以下属性

apisjson-listing

这表明默认版本设置为 1.0.0,但还有其他可用版本(1.0.1 和 1.0.2)。它还表明唯一发布的版本是 1.0.1。

向路径添加 API ID 将显示该 API 的所有版本。例如,以下内容返回 SwaggerHub 注册表 API 的所有版本

https://api.swaggerhub.com/apis/swagger-hub/registry-api

检索 API 定义

如上所示,检索 API 定义非常简单。只需使用端点 https://api.swaggerhub.com/apis/{owner}/{api}/{version} 即可检索 JSON 或 YAML 格式的 Swagger 定义(默认值为 JSON - 将 Accept 标头设置为“application/yaml”以获取 YAML 版本)。如果您想直接定位特定格式,可以将 swagger.json 或 swagger.yaml 追加到端点。例如,SwaggerHub 定义的 JSON 版本可在 https://api.swaggerhub.com/apis/swagger-hub/registry-api/1.0.0/swagger.json 上获得。

创建/更新 API 定义

按照上述说明设置好 API 密钥后,您就可以在 SwaggerHub 注册表中创建和更新 Swagger 定义了。只需将实际的 Swagger 2.0 定义发布到 https://api.swaggerhub.com/apis/{owner}/{api}。

以下规则适用

  • 您只能在您的帐户下更新/创建 API - 即使用您的用户名作为所有者。
  • 目前,该文件必须包含语法有效的 YAML 或 JSON 内容。
  • API 的版本将从 Swagger 定义的版本属性中提取 - 如果它缺失或无效,则该定义将被拒绝。
  • 如果已存在具有该版本的 API 版本,则会使用新的定义对其进行更新(除非该版本已发布 - 在这种情况下,更新将被拒绝)。

就是这样!

简单又直接,对吧? 您可以直接在浏览器中像上面描述的那样使用 API(因为大多数调用都是 GET 调用),也可以在 SwaggerHub 中使用集成的 Swagger-UI,网址为 https://swaggerhub.com/api/swagger-hub/registry-api/1.0.0/ui(请注意末尾的 "ui" - 它会自动在界面中选择 Swagger-UI 选项卡)。

现在,用您的集成来打动我们吧 - 我们很乐意在 https://swagger.org.cn 上分享它们。如果您想查看实际的集成示例,请查看 Ready! API SwaggerHub 插件的源代码,网址为 https://github.com/SmartBear/readyapi-swaggerhub-plugin

继续使用 Swagger 吧!