Swagger UI 2.1 卡住“获取资源列表”

Posted

技术标签:

【中文标题】Swagger UI 2.1 卡住“获取资源列表”【英文标题】:Swagger UI 2.1 Stuck "fetching resource list" 【发布时间】:2015-01-18 17:17:10 【问题描述】:

我最近创建了一个 RESTful API,但几个月后我将不记得如何使用它。我决定使用 Swagger 记录我的 API,但是我快疯了。

我使用http://editor.swagger.io/ 创建了 YAML 文件,然后将其转换为 Swagger 可以使用的 JSON 文件。当我将文件放入 Swagger UI 时,它只是卡在fetching resource list: localhost/swagger.json 并且控制台显示Uncaught TypeError: Cannot read property '$ref' of undefined

我使用的是 Swagger UI 的 2.1.0-alpha.5 版本。

这是我的规范文件:

招摇:'2.0' 信息: 标题:标题 描述: 废话,废话,废话,等等 版本:“1.0b” 主机:api.example.com 方案: - http 基本路径:/v1 产生: - 应用程序/json 路径: /match.json: 得到: #summary:匹配数据 描述:用于获取有关匹配的数据 参数: - 名称:身份证 在:查询 描述:来自游戏的比赛ID 要求:真 类型:整数 格式:int32 - 名称:钥匙 在:查询 描述:用于身份验证的 API 密钥。 要求:真 类型:字符串 回复: 200: 描述:返回匹配数据 架构: 类型:数组 项目: $ref: '#/definitions/MatchData' 默认: 描述:意外错误 架构: $ref: '#/定义/错误' 定义: 匹配数据: 特性: 信息: 类型:整数 格式:int64 描述:关于比赛的一般信息 时间: 类型:整数 格式:int64 描述:关于开始/结束时间的信息 统计: 类型:数组 格式:int64 描述:关于比赛的统计数据 错误: 必需的: - 错误ID - 信息 特性: 错误编号: 类型:字符串 描述:错误 ID。 信息: 类型:字符串 描述:有关错误的信息。

【问题讨论】:

您如何托管 swagger.json?你如何运行 swagger-ui? @webron:“swagger.json”文件位于我的 htdocs 目录的根目录中。来自 repo 的“dist”目录也位于根目录,但已重命名。我正在使用 xampp 来托管它。 【参考方案1】:

我已经测试了您的规范,虽然我没有遇到与您相同的错误,但该规范确实无效。

如果您查看#/definitions/MatchData/properties/stats,您会看到您定义了type: array,但您没有在它旁边提供“items”属性来说明它是哪个数组(这是强制性的)。您可能打算像上面的属性一样使用type: integer,它与format: int64 一起使用。

由于我不知道您打算提供什么,因此很难给出准确的解决方案,但如果您添加您打算做什么的评论,我可以提供更详细的答案。

经过一些额外的测试,我发现 UI 中存在错误。在您进行修改并加载规范后,除非您单击 Expand Operations 链接,否则操作本身不会展开。我已经打开了一个 issue 关于它,请随时关注它。

【讨论】:

我最终只是重写了整个规范以备不时之需。我也有同样的错误,阻止我打开这些部分。感谢您的帮助。【参考方案2】:

这个问题可能是由于 yaml 文件中的一些缩进错误实际上没有显示在 Swagger 编辑器中。检查您的所有定义以及它们是否在您可以在 Swagger 编辑器中看到的预览中按预期显示(尤其是检查 MatchData)。

你也可以尝试给予:

responses:
200:
  description: Returns match data
  schema:
    type: array
    items:
      schema:
        $ref: '#/definitions/MatchData'

【讨论】:

【参考方案3】:

对于我们的案例,我们使用了 Swagger-php,我们有: * @SWG\响应( * 响应=200, * 描述="应用响应" * @SWG\架构( * 类型="数组" * ) * ),

但我们错过了“* @SWG\Items(ref="#/definitions/pet")”。删除“@SWG\Schema(”后,它可以工作,例如

 *     @SWG\Response(
 *         response=200,
 *         description="app response"
 *     ),

【讨论】:

以上是关于Swagger UI 2.1 卡住“获取资源列表”的主要内容,如果未能解决你的问题,请参考以下文章

swagger-ui及swagger用法

Swagger-UI 和 Ktor 如何导入 swagger.json 或 .yaml 文件并启动 Swagger-UI?

java小技能:Swagger (RESTful 风格的 Web 服务框架)

做了一个swagger-ui的主题(theme)

Spring Boot + Swagger + 自定义 swagger-ui.html

Swagger-UI的配置与使用