# 模擬行為

本區段說明模擬如何處理 API Contracts 中可用的各種 API 定義元素。

Mock 主要針對符合 API 合約的請求提供靜態回應。它們會回應請求，而不考慮 API 上定義的任何安全性、請求承載資料或請求標頭（用於內容交涉的 Accept 標頭除外）。

發出請求時，Mock 會根據使用者提供的內容（範例、預設值、列舉值），或是使用內建範例值來建立回應。

例如，如果請求傳回物件，且有提供該物件的範例，則會使用該範例。如果沒有，則會使用各屬性上的範例，並由此建立 JSON 物件。這也適用於回應標頭。

## 回應

* 如果您的操作僅有回應範圍，則會傳回該範圍中的第一個狀態。例如，回應範圍為 2XX 的作業 會傳回 200 回應。
* 如果您的作業具有特定回應碼與回應範圍，或是預設回應，則會傳回所定義的代碼。例如，具有 201 回應與 3XX 回應範圍的作業會傳回 201 回應。
* 如果您的作業具有多個回應範圍且未定義回應狀態，則會傳回第一個範圍的第一個狀態。例如，具有 4XX 與 5XX 回應範圍的作業會傳回 400 回應。
* 如果您的作業只有預設回應，傳回的回應取決於作業方法：
  * 如果使用的方法是 POST，則會傳回 201 回應。
  * 對於其他方法，若未定義回應本文，則會傳回 204 回應；若已定義回應本文，則會傳回 200 回應。
* 如果您的操作未定義回應，則會傳回 200 回應。
* 模擬不支援 1XX 回應。如果作業具有 1XX 回應範圍或此範圍內定義的回應碼，則會傳回 404 回應。

## 組合

* 全部：如果已定義範例，則會傳回該範例。若未針對該資料類型定義範例，則會合併這些類型的屬性，並使用在屬性層級定義的範例，或是產生範例值。如果某個屬性在不同的型別中定義了兩次，則僅會保留最後一個值。基本型別會被捨棄，僅傳回物件。
* 任一 或 其中之一：若已定義範例，則會傳回該範例。若未 定義範例，系統將根據清單中的第一個類型產生回應。

## 限制

* 僅適用於請求：產生的範例中已排除該屬性。
* 僅在回應中提供：此屬性包含在產生的範例中。
* 可用於請求與回應：此屬性包含在產生的範例中。

在資料類型層級提供的範例優先於屬性。如果定義為 僅適用於請求 的屬性包含在範例中，則會在回應中傳回。如果定義為 僅在回應中提供 或 在要求與回應中提供 的屬性未包含在範例中，則不會在回應中傳回。