Swagger UI 无法读取引用的 JSON

Posted

技术标签:

【中文标题】Swagger UI 无法读取引用的 JSON【英文标题】:Swagger UI can't read referenced JSON 【发布时间】:2022-01-21 13:25:29 【问题描述】:

所以我正在使用 express、cors 和 sequelizer 创建一个 API。现在我希望我的 API 有一个不错的文档,并且发现 Swagger UI 对此非常有用。

对于我的问题:由于我的数据库不只是一张表,而且路由更复杂,我想将 JSON 分成几个文件以便更好地概览。现在我尝试在index.json 中使用的参考不起作用。似乎info.json 甚至都不会被触及。

在这里,您可以在我的节点索引文件的开头看到我的 Swagger UI 设置:

const express = require("express");
const cors = require("cors");
const app = express();
const db = require("./app/models");
const swaggerDocument = require("./app/swagger/index.json");
const swaggerUi = require("swagger-ui-express");

const swaggerOptions = 
    swaggerOptions: 
        validatorUrl: null
    
;

app.use("/docs", swaggerUi.serve, swaggerUi.setup(swaggerDocument, swaggerOptions));

./app/swagger/index.json 看起来像这样:


    "swagger": "2.0",
    "info": 
        "$ref": "info.json"
    ,
    "consumes": [
        "application/json"
    ],
    "produces": [
        "application/json"
    ]

引用的info.jsonindex.json 位于同一文件夹中,如下所示:


    "title": "App",
    "version": "0.1",
    "description": "App API Documentation",
    "contact": 
        "name": "My Name",
        "url": "foo.bar"
    ,
    "servers": [
        "http://localhost:8000"
    ]

如果有用:我在 docker-compose 上运行所有内容。

【问题讨论】:

【参考方案1】:

info 对象不支持$refinfo 对象的内容必须内联指定。

此外,OpenAPI 2.0 (swagger: '2.0') 不支持servers,而是使用host + basePath + schemes。这些键必须在规范的根级别。见API Host and Base Path。

// ./app/swagger/index.json


    "swagger": "2.0",
    "info": 
        "title": "App",
        "version": "0.1",
        "description": "App API Documentation",
        ...
    ,

    "host": "localhost:8000",
    "schemes": ["http"],
    ...

【讨论】:

以上是关于Swagger UI 无法读取引用的 JSON的主要内容,如果未能解决你的问题,请参考以下文章

Swagger UI - 有效响应中的“TypeError:无法获取”

无法让 springfox-swagger-ui 与 Spring MVC 一起使用

无法使Swagger ui与springboot一起使用,得到白色标签错误(403)

Swagger-UI展示接口

无法从 spring-boot 应用程序中调出 swagger-ui

Springfox swagger-ui.html无法推断基本URL - 由丢失的cookie引起