在 apigateway 中跨集成响应模型共享模型对象

Shared model objects across integration response models in apigateway

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

根据我今天对 APIGateway 的理解,我必须在 A 的模型定义中定义 C,然后再为 B 定义 C。

这会导致两种不良结果:

  1. 完全重复 json 架构(烦人但并非无法管理)。

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

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

假设您已经定义了一个通用模型 "C",您可以使用以下 JSON 架构在模型 A 或 B 中引用模型 "C":

模型 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" },
    ...
  }
}