当前位置: 首页 > 知识库问答 >
问题:

如何使用JSON Schema和Swagger在API网关模型中声明多种类型的属性?

俞子实
2023-03-14

根据AWS文档,API Gateway中的模型支持JSON Schema语法,但是,它们导出为Swagger OpenAPI规范,其中Swagger规范不完全支持许多有效的JSON Schema结构。

我希望我的API Gateway模型有一组可选的文本字段,例如message,但当定义为

{
  "type": "object",
  "properties": {
    "message": {
      "type": "string"
    }
  }

}

并且启用了主体验证,当消息为空字符串或丢失时,它会拒绝此模型。即使<code>消息

  "required": [
      "message"
    ],

四处挖掘,我发现要允许空/空字符串值,必须将类型添加到属性类型列表中,例如:

{
    "type": ["null", "string"]
}

然而,这仍然不能与API Gateway一起工作,也不能正确地作为Swagger spec YAML导出。

有没有办法通过API网关和Swagger解决这个问题?

共有1个答案

晏志明
2023-03-14

正如海伦所提到的,Swagger 不支持多种类型,也不支持 null 作为一种类型。这可能会阻止您的第一种方法使用 swagger 导入/导出。

但是,内部API网关模型支持确实使用JSON模式,即使导入/导出不使用,也可以工作。我建议您尝试通过API网关控制台或API网关CLI输入模型。

 类似资料:
  • 我正在尝试使用AWS API网关实现Swagger或OpenAPI 3.0中定义的API。 这个API中的一个endpoint采用一个抽象的基本模型(让我们称之为< code>Pet以与老套的Swagger示例保持一致),但实际上期望一个从< code>Pet派生的具体模型...例如< code>Dog。 具体模型可以通过上的(type)属性确定。 当然,这是的工作: (取自此处) 好吧,很烦人,

  • 我是Angular 2和TypeScript的新手,我正在尝试遵循最佳实践。 我试图创建一个TypeScript类,而不是使用简单的JavaScript模型({ })。 但是,Angular 2好像不喜欢。 我的代码是: 我将其用作: 我收到来自 Angular 的错误: 异常:无法解析testWidget的所有参数:(?). 所以我想,模型还没有定义...我把它移到最上面! 除了现在我得到例外:

  • 今天,我意识到让数组像字典一样运行更有意义,这样我就可以通过名称而不是数字索引访问特定元素。我希望能够执行而不是(即使我声明了一个将submitButton映射到请求的索引的枚举)。 这是可行的,但我现在允许一堆欺骗我的代码库,这是很糟糕的。我希望对象知道,只有类型的东西才能放入其中。 我可以用这些字段声明一个类,因为我希望它们的数量在将来可以动态添加,所以下面的操作是不可行的。

  • 问题内容: 我了解在创建这样的新对象时: 更通用,并且允许更多的可重用性,但是当创建tri时会发生以下情况: 由于Triangle是GeomObject的子类,因此tri还是不是GeomObject?声明的类型如何影响编译?谢谢 add:另一个问题:说我有 Integer n1 = new Integer(3); Object n2 = new Integer(4); System.out.pri

  • 我有一个ASP。NET核心Web APIendpoint,它接受(FromBody)下面定义的搜索对象 因此...如果我将以下JSON发布到我的endpoint {“pageSize”:10,“query”:{“fieldId”:“body”,“value”:“cake”,“operator”:“matches”} 我成功地获取了一个搜索对象,但查询属性的类型是Expression,而不是Matc

  • 本文向大家介绍如何在Java 9的JShell中声明引用类型?,包括了如何在Java 9的JShell中声明引用类型?的使用技巧和注意事项,需要的朋友参考一下 与值类型不同,引用类型不会直接存储其值。相反,它将存储存储值的地址 。这意味着引用类型包含指向另一个保存数据的存储位置的指针。引用类型为String,数组,类和委托。 片段1 我n个下面的代码片段,两个新的动物对象是在堆上创建的。它们的存储