# 模拟行为

本部分介绍了 Mock 如何处理 API 契约中提供的各种 API 定义元素。

Mock 主要针对符合 API 契约的请求提供静态响应。它们响应请求时不考虑 API 上定义的任何安全性、请求有效负载或请求标头（用于内容协商的 Accept 标头除外）。

发起请求时，Mock 会根据用户提供的内容（示例、默认值、枚举值）或使用内置示例值来生成响应。

例如，如果请求返回一个对象，且提供了该对象的示例，则会使用该示例。如果没有，则会使用各个属性上的示例，并据此创建一个 JSON 对象。这也适用于响应头。

## 响应

* 如果您的操作仅包含响应范围，则返回该范围内的第一个状态。例如，响应范围为 2XX 的操作会返回 200 响应。
* 如果您的操作具有特定的响应代码以及响应范围或默认响应，则返回所定义的代码。例如，包含 201 响应和 3XX 响应范围的操作将返回 201 响应。
* 如果您的操作有多个响应范围且未定义响应状态，则返回第一个范围的第一个状态。例如，具有 4XX 和 5XX 响应范围的操作 将返回 400 响应。
* 如果您的操作仅包含默认响应，则返回的响应取决于操作方法：
  * 如果使用的方法是 POST，则会返回 201 响应。
  * 对于其他方法，如果未定义响应正文，则返回 204 响应；如果定义了响应正文，则返回 200 响应。
* 如果您的操作未定义响应，则返回 200 响应。
* 1XX 响应不受 mock 支持。如果操作具有 1XX 响应范围或该范围内定义的响应代码，则返回 404 响应。

## 组合

* 全部：如果定义了示例，则返回该示例。如果未为该数据类型定义示例，则会合并这些类型的属性，并使用在属性级别定义的示例，或者生成示例值。如果某个属性在不同的类型中被定义了两次，则仅保留最后一个值。基本类型会被丢弃，仅返回对象。
* Any of 或 One of：如果定义了示例，则返回该示例。如果未定义 示例，则会根据列表中的第一个类型生成响应。

## 限制

* 仅在请求中可用：该属性从生成的示例中排除。
* 仅在响应中可用：该属性包含在生成的示例中。
* 在请求和响应中均可用：该属性包含在生成的示例中。

在数据类型级别提供的示例优先于属性。如果定义为 仅在请求中可用 的属性包含在示例中，它会在响应中返回。如果定义为 仅在响应中可用 或 在请求和响应中均可用 的属性未包含在示例中，则该属性不会在响应中返回。