解锁规范:默认关键字

  2015 年 8 月 6 日

作者:Ron Ratovksy

API 的一个常见用例是,对于一个调用,您可能有一组具有预定义值的参数。以分页为例,该调用允许您请求特定页面的查询结果。作为生产者,您可能允许消费者设置每页的条目数,但您也希望允许消费者在每次请求时都不发送的情况下获得预定义数量的条目。

使用默认值

这就是 default 值的作用所在。在 Swagger 规范中,default 允许您为参数、模型(及其属性)或响应头(容器)设置值。当客户端或服务器省略这些值时,接收端应假定为 default 值。

default 关键字的值在 Swagger 规范中略有不同。它被定义为 Any,但旨在“复制”其包含对象的类型。因此,如果您的参数类型为 string,则 default 的值也应为 string。显然,不匹配的类型是没有意义的,因为您将声明该属性的默认值与允许的类型不同。对于复杂类型的正文参数,default 可以表示一个复杂的默认值。数组类型的容器也应具有数组结构的默认值。

您可以在规范的以下位置找到 default 属性

为什么要使用默认值?

定义该值有以下几个好处

  • 如前所述,它允许从请求中省略参数/属性/头,从而简化流程并最大限度地减少所需的带宽。
  • 它有助于记录您的 API 的行为。如果您指定默认值,您的消费者就知道响应中会发生什么。
  • 它允许更好地进行 API 测试,因为测试人员知道未指定容器时的预期结果。

使用默认值时常见的错误

使用 default 值时,可能存在两种差异

  • 为容器定义默认值并将该容器标记为必填项有点矛盾。如果容器是必填项,则始终会发送该容器,并且默认值将永远不会生效。
  • 第二种情况是使用 default 作为提及容器示例值的方法。这不是该字段的正确用法,并且可能导致某些 Swagger 工具中出现意外行为。某些容器提供了设置示例值的替代方法。

专业提示

我们还有 default 关键字的另一种用法,它非常不同。它可以在 responses 部分下使用,以提及 API 的通用响应。通常,您会描述您的成功响应,但有时您可能有一种通用的方法来暴露错误,无论使用哪个 HTTP 状态代码。在这种情况下,您可以使用 default 响应并提供它使用的通用结构。

有关更多信息,请查看规范中的部分 - https://swagger.org.cn/specification/#responsesDefault