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

API网关请求验证程序是否支持格式属性?

岳泳
2023-03-14

我在API Gateway swagger文件(OAS 3.0)中添加了一个请求验证器。当我通过传入一个无效的请求体来测试验证时,我收到的错误消息包括我不理解的错误。复制步骤如下。

  1. 使用以下变量创建新的 api 网关:
openapi: 3.0.0
info:
  version: "1"
  title: Request Validation Example
  description: |
    ## Request Validation
    Minimal swagger to reproduce request validation errors.

x-amazon-apigateway-request-validators: 
  all:
    validateRequestBody: true
    validateRequestParameters: true
x-amazon-apigateway-gateway-responses:
  BAD_REQUEST_BODY:
    statusCode: 400
    responseTemplates:
      application/json: |
        {
          message: $context.error.messageString
          errors: $context.error.validationErrorString
        }
paths:
  /employee:
    post:
      x-amazon-apigateway-request-validator: all
      summary: Create a new Employee
      operationId: CreateEmployee
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/Employee"
        required: true
      responses:
        "201":
          description: Created
          $ref: "#/components/responses/200"
components:
  responses:
    "200":
      description: Success
  schemas:
    Employee:
      type: object
      properties:
        id:
          type: integer
          format: int32
        phoneNumbers:
          type: array
          items:
            $ref: "#/components/schemas/PhoneNumber"
        salary:
          type: number
          format: double
      required:
        - phoneNumbers
        - salary      
    PhoneNumber:
      type: object
      properties:
        number:
          type: string
      required:
        - number

为新创建的员工资源设置集成方法,选择模拟集成。

使用以下请求正文测试员工发布方法:

{
    "id": 1,
    "phoneNumbers": [
        {
            "number": "1234567890"
        }
    ],
    "salary": 45000
}

此请求主体的请求验证将成功

{
    "id": "1",
    "phoneNumbers": [
        {
            "number": "1234567890"
        }
    ],
    "salary": 45000
}

您现在将看到以下请求验证错误:

{
  message:  "Invalid request body"
  errors: [instance type (string) does not match any allowed primitive type (allowed: [\"integer\"]), format attribute \"double\" not supported, format attribute \"int32\" not supported]
}

您可以看到此消息包含正确的错误,指出字符串id与整数类型不匹配。您还会看到格式属性Double和int32不支持的错误,这些是我不理解的错误。据我所知,OAS 2.0和3.0支持Double和int32格式属性。API网关请求验证器支持Double和int32格式属性吗?在我的swagger定义中,请求验证器配置不正确吗?

编辑:看来int32和双格式属性是已知问题:https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-known-issues.html#api-RESTAPI的网关已知问题

然而,我在format属性中使用正则表达式时也遇到了这些问题。这在已知问题中没有特别提到,所以仍在寻找这方面的信息。

共有1个答案

袁琪
2023-03-14

我认为需要注意的是,OAS文档中定义的模型应该是JSONSchema,而不一定是OpenAPI。它们在运行时被验证为JSONSchema Draft 4,该规范中不包含< code>format属性。

有时令人困惑的是<code>导入<code>操作。当使用OpenAPI定义API并导入API时,API网关将解析模型OAS规范和JSONSchema草案4的交集。

如果您需要JSONSchema的属性,而该属性未包含在OpenAPI的Schema规范中(例如type:[…, null]),则直接创建或更新API网关::模型是一种解决方法。

 类似资料:
  • 我们使用JSch库(JSch-0.1.55.jar)与SFTP服务器(Bitvise)建立连接。 我们正在使用PPK2私钥格式,它的工作与提到的SFTP服务器很好。但是,当使用PPK3私钥格式时,它不能与同一服务器一起工作。 JSch库(jsch-0.1.55.jar)是否支持PPK3格式? 有人可以帮助这篇文章或任何解决问题的方法吗?

  • 问题内容: 我搜索了Google,发现了一些矛盾之处。xlwt是否支持xlsx文件(MS Office 2007)。我听说xlwt 0.7.4支持xlsx文件。有谁尝试过使用xlwt 0.7.4编写xlsx文件 这个问题的目的是,如果我需要安装,我没有安装库的权限,我需要提供更多详细信息。我需要用python编写xlsx文件,所以如果有人做过类似的事情将有助于提供更好的信息 我已经查看了这个Wik

  • 我正在考虑使用Postman来自动化我对REST API的测试,并且只使用了几天。到目前为止,我已经为我的初始集合创建了足够数量的请求。我还在请求前脚本、测试和请求正文中使用了全局、环境和集合变量。我希望控制请求中包含哪些属性,而无需复制同一请求的多个副本以排除某些属性。 例如,我有一个 JSON 请求正文,如下所示: 如果“OtherProperty”为空或为空,我想从请求中完全删除该属性。我只

  • nosql数据库具有无模式属性,因此我们可以向节点或关系添加任何字段/属性。但是如果我使用Spring数据作为框架,我必须预先定义节点和关系对象的字段。Spring数据Neo4j似乎不支持动态插入字段...是真的吗?

  • 当我使用postman时,谷歌似乎没有验证我的请求主体架构,甚至没有验证请求有主体。我错过了什么吗?对我来说,这意味着谷歌在调用x-google-backend之前会验证此类事情,但它总是将请求传递给我的云函数,无论我是否传递有效数据。 我用这个问题作为指导。 user.yaml:

  • 我在服务器端有几个问题。 我有50多个API。 需要检查每一个API(GET, POST)方法下面的东西。 验证输入是否为有效的json 例如1: 在上面的输入中,我需要检查几个关键字是手动的。例如:名称、代码 例2: 在上面的例子中,我需要检查州和城市 我检查了包裹,但没有找到适合我的。 是否有用于检查json验证的包?