在swagger-ui中使用多个Json文件

时间:2016-02-16 12:54:26

标签: swagger swagger-ui swagger-2.0

我正在使用Swagger-ui version 2.1.4,我在本地托管它,并提供了我自己的Json文件和API,它打开文档很好并列出了json文件中的所有方法,但json文件变得非常大,我想要使用多个json文件并希望一次打开一个,我不知道如何提供多个json文件并使用它们,因为我在索引页面中提供的单个文件是这样的:

  var url = window.location.search.match(/url=([^&]+)/);
  if (url && url.length > 1) {
      url = decodeURIComponent(url[1]);
  } else {
      url = "http://localhost:1122/Json/Swagger-ui2.1.4V1.JSON";
  }

1 个答案:

答案 0 :(得分:1)

Swagger JSON的基本结构应如下所示:

{
"swagger": "2.0",
"info": {
    "title": "",
    "version": "version number here"
},
"basePath": "/",
"host": "host goes here",
"schemes": [
    "http"
],
"produces": [
    "application/json"
],
"paths": {},
"definitions": {}
}

pathsdefinitions是您需要插入API支持的路径以及描述响应对象的模型定义的地方。您可以动态填充这些对象。这样做的一种方法是为每个实体的路径和模型提供单独的文件。

假设您的API中的某个对象是" car"。

路径:

{
"paths": {
    "/cars": {
        "get": {
            "tags": [
                "Car"
            ],
            "summary": "Get all cars",
            "description": "Returns all of the cars.",             
            "responses": {
                "200": {
                    "description": "An array of cars",
                    "schema": {
                        "type": "array",
                        "items": {
                            "$ref": "#/definitions/car"
                        }
                    }
                },
                "404": {
                    "description": "error fetching cars",
                    "schema": {
                        "$ref": "#/definitions/error"
                    }
                }
            }
        }
    }
}

型号:

{
"car": {
    "properties": {
        "_id": {
            "type": "string",
            "description": "car unique identifier"
        },
        "make": {
            "type": "string",
            "description": "Make of the car"
        },
        "model":{
            "type": "string",
            "description": "Model of the car."
        }
    }
}
}

然后,您可以将每个文件放在自己的文件中。启动服务器时,可以获取这两个JSON对象,并将它们附加到基本swagger对象中的相应对象(pathsdefinitions),并将该基础对象作为Swagger JSON对象提供

您还可以通过在服务器启动时仅执行一次附加来进一步优化此功能(因为在服务器运行时API文档不会更改)。然后,当"服务Swagger docs"如果端点被命中,您只需返回在服务器启动时创建的缓存的Swagger JSON对象。

"提供Swagger文档"可以通过将请求发送到/api-docs来拦截端点,如下所示:

app.get('/api-docs', function(req, res) {
  // return the created Swagger JSON object here
});