如何在swagger.io中定义枚举?

时间:2014-12-22 13:41:08

标签: javascript json swagger

是否有人能够定义可能的' enum' swaggger版本2.0中的模型选项卡中的值?例如:http://petstore.swagger.wordnik.com/#!/pet/addPet有一个枚举选项,用于' status'属性,但该示例使用swagger 1.0版(根据JSON对象中定义的swagger版本)。我试图在版本2.0中实现相同但没有运气,不确定文档是否正确。

有什么暗示吗?

4 个答案:

答案 0 :(得分:61)

“enum”就像这样:

      {
        "in": "query",
        "name": "sample",
        "description": "a sample parameter with an enum value",
        "type": "string",
        "enum": [ "1", "2"],
        "required": true
      }

正如您所看到的,有一个名为sample的类型为string的查询参数,并且有一个枚举表明两个可能的值。在这种情况下,示例声明参数是必需的,因此UI不会显示空值作为选项。

对于最小工作样本,请尝试以下方法:

{
  "swagger": "2.0",
  "info": {
    "title": "title",
    "description": "descriptor",
    "version": "0.1"
  },
  "paths": {
    "/sample": {
      "post": {
        "description": "sample",
        "parameters": [
          {
            "in": "query",
            "name": "sample",
            "description": "a sample parameter with an enum value",
            "type": "string",
            "enum": [
              "1",
              "2"
            ],
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "Successful request."
          }
        }
      }
    }
  }
}

要在本地测试它,您可以在javascript中声明一个变量(例如spec),并将其传递给SwaggerUi对象。

  var spec = { ... };

  window.swaggerUi = new SwaggerUi({
    url: url,
    spec: spec,
    dom_id: "swagger-ui-container",
    supportedSubmitMethods: ['get', 'post', 'put', 'delete'],
    onComplete: function(swaggerApi, swaggerUi){
    ...

在这种情况下,url参数将被忽略。

最终,输出如下:

enter image description here

我能够以这种方式做到这一点,但是你可以在下面的图片中看到每个参数创建了下拉列表: enter image description here

我想要实现的是很好的Model / Model Schema选项卡,如下图所示,并为参数列出了可用的枚举。这是否可以在最新版本的Swagger中使用:

enter image description here

答案 1 :(得分:13)

使用YAML语法更新此内容:

in: query
name: sample
description: a sample parameter with an enum value
type: string
enum:
    - 1
    - 2
required: true

答案 2 :(得分:-1)

这应该有效:

{
    "name": "bookingType",
    "in": "path",
    "type": "array",
    "items": {
        "enum": [
            "packages", "accommodations"
        ]
    },
    "description": "lorem ipsum"
}

参考https://github.com/swagger-api/swagger-spec/blob/master/versions/2.0.md#itemsObject

答案 3 :(得分:-1)

这不是确切的答案,但它可能对您有用,直到他们添加此功能。

简单地声明属性如此

"MyObject":{
   "properties":{
      "MyEnum":{
         "type":"Value1 or Value2 or Value3"
      }
   }
}

您的ModelSchema会显示{},但模型会显示MyEnum(Value1 or Value2 or Value3, optional)