如何使用aws API Gateway从另一个模型引用一个模型

时间:2016-06-14 22:23:43

标签: amazon-web-services aws-api-gateway

说我有一个模特:

"Pet":{
  "type": "object"
  "properties": {
    "name":{"type":"integer"},
    "age":{"type":"integer"}
  }
}

另一种模式:

"Human":{
  "type": "object"
  "properties": {
    "name":{"type":"integer"},
    "age":{"type":"integer"},
    "pets":{
      "type":"array"
      "items": {
        <This is where my question is>
      }
    }
  }
}

如何在人体模型中引用宠物模型?

随着招摇,我能够说:

"$ref": "#/definitions/Pet"

但API Gateway似乎不允许这样做。

2 个答案:

答案 0 :(得分:4)

如果您指的是swagger之外的参考模型,您可以通过使用下面的绝对URL指定模型来实现这一点

 {"type":"array","items":{"$ref":"https://apigateway.amazonaws.com/restapis/<rest_api_id>/models/Pet"}}

对于swagger,这个来自open api规范的例子展示了如何在swagger中引用模型 - https://github.com/OAI/OpenAPI-Specification/blob/master/examples/v2.0/json/petstore.json

"Pets": {
  "type": "array",
  "items": {
    "$ref": "#/definitions/Pet"
  }

请注意,api网关不支持“默认”响应,因此如果您尝试导入上述petstore.json示例,则需要删除“默认”字段。

答案 1 :(得分:0)

如果您只想要单个值(而不是数组),则可以这样做:

..
"properties": {
            "id": {
                "$ref": "https://apigateway.amazonaws.com/restapis/abcd1234/models/UserId"
            },
..

(如果这可以是相对URL而不是绝对URL,那就太好了,但是我还没有提到如何做到这一点)