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

如何在与AWS API网关兼容的OpenAPI 3.0. x中声明可空属性

阎烨
2023-03-14

我们一直在使用OpenAPI 3.0。x规范,它添加了声明可为null的属性的特性。

当我将此OpenAPI导入AWS API网关时,相应的模型不支持此可为空设置。

有没有办法在OpenAPI 3.0中声明可为null的属性。那么AWS API网关是否也使用此设置识别和配置基础模型?

示例OpenAPI规范

openapi: "3.0.2"
info:
  title: Test
  description: |
    API
  version: "0.1.0"
  license:
    name: Private
    url: https://fillme.one/license
servers:
  - url: /api/v1
paths:
  /accounts:
    post:
      operationId: repa
      responses:
        200:
          description: test
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                date:
                  type: string
                  format: date-time
                  nullable: true
              required:
                - date

生成模型的结果JSON模式文档

{
  "required" : [ "date" ],
  "type" : "object",
  "properties" : {
    "date" : {
      "type" : "string",
      "format" : "date-time"
    }
  }
}

很明显,类型应该是[“string”,null]的并集,但AWS API网关忽略了OpenAPI规范。

有什么帮助吗?

共有1个答案

邬楚青
2023-03-14

AWS API网关需要JSON模式格式的模型,而不是OpenAPI模式格式的模型。以下是文档中的相关注释(重点是我的):

API Gateway支持大多数OpenAPI 2.0规范和OpenAPI 3.0规范,但以下例外:

  • API网关模型是使用JSON模式草案4定义的,而不是OpenAPI使用的JSON模式

这意味着AWS API网关需要type:[string,'null']而不是type: stringnullable: true

但是,type:[string,'null']在OpenAPI 3.0中不是有效的语法(但在OAS 3.1中有效)。您可以做的是在将现有的OpenAPI文件导入AWS API Gateway之前对其进行预处理,并将可空类型定义更改为AWS期望的格式/语法。您可以尝试使用openapi-Schema-to-json-Schema等工具。

 类似资料:
  • 我们正在尝试从C#Windows服务调用AWS API网关来执行后台作业。哪个应该触发API网关定期初始化请求? 我们使用RestSharp调用APIendpoint,该类称为AwsAuthenticator,它继承自RestSharp.Authenticators.IAAuthenticator。但当我们调用API Gateway时,收到的错误是“我们计算的请求签名与您提供的签名不匹配。请检查您

  • 问题内容: PHP中此错误的可能原因是什么?在哪里可以找到有关 兼容的信息 ? 问题答案: 与相比具有不同的参数或不同的访问级别(公共/私有/受保护)。

  • 我刚刚在PHP 5.4上安装了woocommerce 2.0(在Wordpress上),我得到了这个: 严格标准:WC_Gateway_BACS::process_payment()的声明应与D:\my\path\to\htdocs\wordpress\plugins\woocommerce\classs\Gateway\BACS\class WC-Gateway-BACS中的WC_payment

  • 我正在尝试创建用于AWS IoT的自签名X.509证书。我可以理解它与普通的OpenSSL证书没有什么不同,但我偶然发现AWS创建的PEM文件有些不同。因为我是OpenSSL新手,所以我无法找出我缺少了什么 我使用下面的命令创建私钥、CSR和服务器证书 openssl req-newkey rsa: 2048-new-节点-keyoutkey.pemcsr.pem openssl x509-req

  • 问题内容: 如何在Python中声明静态属性? 这里写了我如何声明一个方法: Python中的静态方法? 问题答案: 在Python的类级别定义的所有变量均被视为静态 在类中,您可以使用相同的名称拥有两个不同的变量(一个静态变量和一个普通变量)。不要困惑。

  • 问题内容: 如何在JavaScript中创建名称空间,以使我的对象和函数不会被其他同名对象和函数覆盖?我使用了以下内容: 有没有更优雅或更简洁的方法? 问题答案: 我喜欢这个: