当需要单个值时,应该如何处理数组查询参数?
How should array query parameters be handled when a single value is expected?
我正在构建一个 API,我参考了 OpenAPI 的某些标准和最佳实践。
假设我有一个分页端点,/users
。 /users
使用查询参数处理分页,offset
和 limit
。
因此,如果我想要 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
我正在构建一个 API,我参考了 OpenAPI 的某些标准和最佳实践。
假设我有一个分页端点,/users
。 /users
使用查询参数处理分页,offset
和 limit
。
因此,如果我想要 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