2017-11-11 224 views
0

我使用ReDoc來使用OpenAPI 2(Swagger)JSON文件可視化API文檔。我試圖通過包括第一模式到第二個如下聲明兩個請求輸入參數:如何從另一個模式繼承模式屬性?

... 
"definitions": { 
    "list-request": { 
     "type": "object", 
     "properties": { 
      "token":{ 
       "type": "string", 
       "format": "access-token", 
       "required": true 
      }, 
      "userId":{ 
       "type": "integer", 
       "required": true, 
       "format": "int32" 
      }, 
      "mode": { 
       "type": "string", 
       "required": false, 
       "default": "lite", 
       "enum": [ 
        "lite", 
        "detailed" 
       ] 
      }, 
      ... // other peroperties 
     }, 
     "xml": { 
      "name": "list-request" 
     } 
    }, 
    "list-request-lite":{ 
     "$ref": "#/definitions/list-request", 
     "properties":{ 
      "mode": { 
       "type": "string", 
       "required": false, 
       "enum": ["lite"] 
      } 
     } 
    }, 
    ... 
} 

但它不工作 - list-request-lite模式只顯示了mode財產,沒有list-request架構屬性的被包含在內。我究竟做錯了什麼?

+1

[在揚鞭文檔結合defintions]的可能的複製(https://stackoverflow.com/questions/29463634/combining-defintions-in-swagger-docs) – Helen

回答

1

您需要allOf$ref與其他屬性組合。

此外,所需的屬性需要在模式級別的required數組中列出。單個屬性沒有required屬性。

"definitions": { 
    "list-request": { 
    "type": "object", 
    "properties": { 
     "token": { 
     "type": "string", 
     "format": "access-token" 
     }, 
     "userId": { 
     "type": "integer", 
     "format": "int32" 
     }, 
     "mode": { 
     "type": "string", 
     "default": "lite", 
     "enum": [ 
      "lite", 
      "detailed" 
     ] 
     } 
    }, 
    "xml": { 
     "name": "list-request" 
    }, 
    "required": [  // <---- required properties for this schema 
     "token", 
     "userId" 
    ] 
    }, 

    "list-request-lite": { 
    "allOf": [  // <--------- 
     { 
     "$ref": "#/definitions/list-request" 
     }, 
     { 
     "type": "object", 
     "properties": { 
      "mode": { 
      "type": "string", 
      "enum": ["lite"] 
      } 
     } 
     } 
    ] 
    } 
}