apigateway

时间:2016-02-24 19:48:01

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

假设我有2个响应模型A和B.A和B共享一个共同的嵌套对象C.(即A.C.field1 B.C.field1)。

据我了解APIGateway今天,我必须在A的模型定义中定义C,然后再为B.

这会导致两种不良后果:

  1. 完全重复的json架构(烦人但不可能无法管理)。

  2. 在生成的obj-c(或java)SDK中,我有两个不同的类A.C和B.C.这种复制使得SDK的使用变得复杂,因为C的两个版本的类型不同。

1 个答案:

答案 0 :(得分:2)

您可以定义共享模型对象,并使用规范参考在其他模型中引用它。

假设您已经定义了一个共同模型" C",您可以参考模型" C"在具有以下JSON模式的模型A或B中:

模型A或B:

{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "field": { 
        "$ref": "https://apigateway.amazonaws.com/restapis/{{api-id}}/models/C" 
    }
  }
}

生成的SDK将具有公共对象C.

如果您的共享对象属性包含在单个模型中,则可以改为使用内联引用

{
  "$schema": "http://json-schema.org/draft-04/schema#",

  "definitions": {
    "C": {
      "type": "object",
      "properties": {
        ...
      }
    }
  },

  "type": "object",

  "properties": {
    "field": { "$ref": "#/definitions/C" },
    ...
  }
}