当需要单个值时,应该如何处理数组查询参数?

How should array query parameters be handled when a single value is expected?

我正在构建一个 API,我参考了 OpenAPI 的某些标准和最佳实践。

假设我有一个分页端点,/users/users 使用查询参数处理分页,offsetlimit

因此,如果我想要 API 的前 50 个用户,我会调用 GET /users?offset=0&limit=50

实现这个非常简单,但是如果 API 消费者调用以下内容会怎样:

/users?offset=0&offset=20&limit=50&limit100`

当每个查询参数只需要一个值时,API 应该如何处理多个值?我应该抛出一个错误吗?我应该只接受每个参数的第一个值吗?

最新的 OpenAPI 规范中是否有任何内容涵盖了应如何处理?

在 Node.js 中,当您有多个具有相同键的值时,它 returns 一个像这样的值数组:

{ offset: [ '0', '20' ], limit: [ '50', '100' ] }

它在查询的请求对象上可用,即 request.query。它可能会创建一个用于偏移和限制的范围,只是推测。

offset的范围可以是0-20,限制可以是50-100。 open API 中的算法必须能够处理它。

更好的地方应该是在公开的API问答中提问。

在 OpenAPI 定义中,如果查询参数允许多个值,则其架构应定义为 array:

  parameters:
    - name: q
      in: query
      schema:
        type: array
        items:
          type: string

当参数的架构为单值时,客户端发送多个值被视为违反架构。但是服务器是否容忍这个错误超出了OpenAPI的范围。

parameters:
  - name: offset
    in: query
    schema:
      type:  integer
  - name: limit
    in: query
    schema:
      type:  integer