2015-02-10 26 views
0

我试图使用Swagger Docs为给定端点的我的实现说明显示HTML。下面,我将HTML输入为字符串,但我喜欢将它们作为某种模块加载,以便我可以单独编辑HTML文件。将HTML加载到Swagger文档中执行说明

我在Google Group找不到答案,我想看看在创建某种grunt插件来处理它之前是否已经解决了这个问题。

这里是我当前的代码:

module.exports = function (swagger) { 

var docs = swagger.createResource("/docs/endpoint"); 

docs.get('/endpoint', "Endpoint Title", { 
    "summary": "Some description about the endpoint", 
    "notes": "               \ 
     <h2>Getting Started with Endpoint:</h2>       \ 
     <br /><p>This endpoint some some really important things.</p>  \ 
    ", 
    "type": "", 
    "nickname": "", 
    "parameters": [ 
    { 
     "name": "apiKey", 
     "description": "The API Key for the requesting application", 
     "required": true, 
     "type": "string", 
     "paramType":"query" 
    }] 
[...] 

有没有实现这一个更清洁的方式?

+2

您是否知道Swagger 2.0支持GFM的大多数说明和信息字段? – Ron 2015-02-10 15:26:25

+0

您是否建议我可以编辑.md文件并将它们加载到描述字段中?这将是甜蜜的。在这方面一些粗略的搜索没有产生太多的结果。一些文档的链接将很酷 – d2burke 2015-02-10 15:30:53

+2

你将不得不将它们包含在规范本身中。您不能从这些字段中引用外部文档。但是,对于Swagger 2.0,还可以选择包含许多属性的externalDocs,这可能导致几乎任何事情。如何在UI中未实现,应在M2中提供。 – Ron 2015-02-10 15:43:01

回答

1

Swagger 2.0为丰富的文档增加了更多的灵活性。

其中一种方法是在description字段中添加降价标签(GFM flavor)。

另一种方法是在适用的情况下使用externalDocs属性添加外部文档资源。一个例子是:

{ 
    "swagger": "2.0", 
    "info": { 
    "version": "1.0.0", 
    "title": "Swagger Petstore", 
    "description": "A sample API that uses a petstore as an example to demonstrate features in the swagger-2.0 specification", 
    "termsOfService": "http://helloreverb.com/terms/", 
    "contact": { 
     "name": "Wordnik API Team", 
     "email": "[email protected]", 
     "url": "http://madskristensen.net" 
    }, 
    "license": { 
     "name": "MIT", 
     "url": "http://github.com/gruntjs/grunt/blob/master/LICENSE-MIT" 
    } 
    }, 
    "externalDocs": { 
    "description": "find more info here", 
    "url": "https://helloreverb.com/about" 
    }, 
    "host": "petstore.swagger.wordnik.com", 
    "basePath": "/api", 
    "schemes": [ 
    "http" 
    ], 
    "consumes": [ 
    "application/json" 
    ], 
    "produces": [ 
    "application/json" 
    ], 
    "paths": { 
    "/pets": { 
     "get": { 
     "description": "Returns all pets from the system that the user has access to", 
     "operationId": "findPets", 
     "externalDocs": { 
      "description": "find more info here", 
      "url": "https://helloreverb.com/about" 
     }, 
     "produces": [ 
      "application/json", 
      "application/xml", 
      "text/xml", 
      "text/html" 
     ], 
     "parameters": [ 
      { 
      "name": "tags", 
      "in": "query", 
      "description": "tags to filter by", 
      "required": false, 
      "type": "array", 
      "items": { 
       "type": "string" 
      }, 
      "collectionFormat": "csv" 
      }, 
      { 
      "name": "limit", 
      "in": "query", 
      "description": "maximum number of results to return", 
      "required": false, 
      "type": "integer", 
      "format": "int32" 
      } 
     ], 
     "responses": { 
      "200": { 
      "description": "pet response", 
      "schema": { 
       "type": "array", 
       "items": { 
       "$ref": "#/definitions/pet" 
       } 
      } 
      }, 
      "default": { 
      "description": "unexpected error", 
      "schema": { 
       "$ref": "#/definitions/errorModel" 
      } 
      } 
     } 
     }, 
     "post": { 
     "description": "Creates a new pet in the store. Duplicates are allowed", 
     "operationId": "addPet", 
     "produces": [ 
      "application/json" 
     ], 
     "parameters": [ 
      { 
      "name": "pet", 
      "in": "body", 
      "description": "Pet to add to the store", 
      "required": true, 
      "schema": { 
       "$ref": "#/definitions/newPet" 
      } 
      } 
     ], 
     "responses": { 
      "200": { 
      "description": "pet response", 
      "schema": { 
       "$ref": "#/definitions/pet" 
      } 
      }, 
      "default": { 
      "description": "unexpected error", 
      "schema": { 
       "$ref": "#/definitions/errorModel" 
      } 
      } 
     } 
     } 
    }, 
    "/pets/{id}": { 
     "get": { 
     "description": "Returns a user based on a single ID, if the user does not have access to the pet", 
     "operationId": "findPetById", 
     "produces": [ 
      "application/json", 
      "application/xml", 
      "text/xml", 
      "text/html" 
     ], 
     "parameters": [ 
      { 
      "name": "id", 
      "in": "path", 
      "description": "ID of pet to fetch", 
      "required": true, 
      "type": "integer", 
      "format": "int64" 
      } 
     ], 
     "responses": { 
      "200": { 
      "description": "pet response", 
      "schema": { 
       "$ref": "#/definitions/pet" 
      } 
      }, 
      "default": { 
      "description": "unexpected error", 
      "schema": { 
       "$ref": "#/definitions/errorModel" 
      } 
      } 
     } 
     }, 
     "delete": { 
     "description": "deletes a single pet based on the ID supplied", 
     "operationId": "deletePet", 
     "parameters": [ 
      { 
      "name": "id", 
      "in": "path", 
      "description": "ID of pet to delete", 
      "required": true, 
      "type": "integer", 
      "format": "int64" 
      } 
     ], 
     "responses": { 
      "204": { 
      "description": "pet deleted" 
      }, 
      "default": { 
      "description": "unexpected error", 
      "schema": { 
       "$ref": "#/definitions/errorModel" 
      } 
      } 
     } 
     } 
    } 
    }, 
    "definitions": { 
    "pet": { 
     "required": [ 
     "id", 
     "name" 
     ], 
     "externalDocs": { 
     "description": "find more info here", 
     "url": "https://helloreverb.com/about" 
     }, 
     "properties": { 
     "id": { 
      "type": "integer", 
      "format": "int64" 
     }, 
     "name": { 
      "type": "string" 
     }, 
     "tag": { 
      "type": "string" 
     } 
     } 
    }, 
    "newPet": { 
     "allOf": [ 
     { 
      "$ref": "pet" 
     }, 
     { 
      "required": [ 
      "name" 
      ], 
      "properties": { 
      "id": { 
       "type": "integer", 
       "format": "int64" 
      } 
      } 
     } 
     ] 
    }, 
    "errorModel": { 
     "required": [ 
     "code", 
     "message" 
     ], 
     "properties": { 
     "code": { 
      "type": "integer", 
      "format": "int32" 
     }, 
     "message": { 
      "type": "string" 
     } 
     } 
    } 
    } 
} 
+0

好的...我想我明白你现在得到了什么。从本质上讲,没有其他方法可以将HTML或MD **动态加载到字段中。我只能链接到外部文档,这不是我想要的。我理解正确吗? 我想编辑单独的html或md文件并将它们加载到'notes'字段中。 – d2burke 2015-02-10 16:09:26

+1

该规范是一个静态文件。它的生成可以是动态的,但是当它由任何工具加载时,它将是静态的。您是否可以将HTML或MD动态加载到字段中取决于您使用的工具的功能。我不知道目前支持它的任何工具,但是这不应该阻止您在选择的工具上打开功能请求。 – Ron 2015-02-10 16:21:13