

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 使用 設定 GraphQL 執行複雜性、查詢深度和自我檢查 AWS AppSync
<a name="configuration-limits"></a>

AWS AppSync 可讓您啟用或停用自我檢查功能，並將限制設定為單一查詢中的巢狀層級和解析程式數量。

## 使用自我檢查功能
<a name="configuration-limits-introspection"></a>

**提示**  
如需 GraphQL 中自我檢查的詳細資訊，請參閱 [GraphQL 基礎網站上的](https://graphql.org/learn/introspection/)這篇文章。

根據預設，GraphQL 可讓您使用自我檢查來查詢結構描述本身，以探索其類型、欄位、查詢、變動、訂閱等。這是了解 GraphQL 服務如何塑造和處理資料的重要功能。不過，在處理自我檢查時，需要考慮一些事項。您可能會有一個使用案例，從停用自我檢查中受益，例如，欄位名稱可能敏感或隱藏，或完整的 API 結構描述旨在為消費者保留未記錄的案例。在這些情況下，透過自我檢查發佈結構描述資料可能會導致刻意洩漏私有資料。

若要防止這種情況發生，您可以停用自我檢查。這將防止未經授權的對象在您的結構描述上使用自我檢查欄位。不過，請務必注意，自我檢查對於開發團隊了解其服務中的資料如何處理很有用。在內部，在生產程式碼中停用自我檢查作為額外的安全層時，保持啟用自我檢查可能很有幫助。另一種處理方式是新增 AWS AppSync 也提供的授權方法。如需詳細資訊，請參閱[ 授權](https://docs.aws.amazon.com/appsync/latest/devguide/security-authz.html)。

AWS AppSync 可讓您在 API 層級啟用或停用自我檢查。若要啟用或停用自我檢查，請執行下列動作：

1. 登入 AWS 管理主控台 並開啟 [AppSync 主控台](https://console.aws.amazon.com/appsync/)。

1. 在 **APIs**頁面上，選擇 GraphQL API 的名稱。

1. 在 API 首頁的導覽窗格中，選擇**設定**。

1. 在 **API 組態**中，選擇**編輯**。

1. 在**自我檢查查詢**下，執行下列動作：

   1. 開啟或關閉**啟用自我檢查查詢**。

1. 選擇**儲存**。

啟用自我檢查時 （預設行為），使用自我檢查系統將正常運作。例如，下圖顯示處理結構描述中所有可用類型的`__schema`欄位：

![\[GraphQL schema explorer showing query structure with types and name fields.\]](http://docs.aws.amazon.com/zh_tw/appsync/latest/devguide/images/introspection-enabled.png)


停用此功能時，驗證錯誤將改為顯示在回應中：

![\[GraphQL query editor showing a validation error for undefined 'types' field in '_Schema'.\]](http://docs.aws.amazon.com/zh_tw/appsync/latest/devguide/images/introspection-disabled.png)


## 設定查詢深度限制
<a name="configuration-limits-depth"></a>

有時候，您可能需要更精細地控制 API 在 操作期間的運作方式。其中一個控制項是將限制新增至查詢可能處理的巢狀層級數量。根據預設，查詢能夠處理無限數量的巢狀層級。將查詢限制在指定的巢狀層級數量，可能會對專案的效能和彈性產生潛在影響。採取下列查詢：

```
query MyQuery {
  L1: nextLayer {
    L2: nextLayer {
      L3: nextLayer {
        L4: value
      }
    }
  }
}
```

您的專案可能會出於某些目的呼叫 來限制對 `L1`或 `L2` 的查詢。根據預設，從 `L1`到 的整個查詢`L4`都會處理，無法控制。透過設定限制，您可以防止查詢存取超過指定層級的任何內容。

若要新增查詢深度限制，請執行下列動作：

1. 登入 AWS 管理主控台 並開啟 [AppSync 主控台](https://console.aws.amazon.com/appsync/)。

1. 在 **APIs**頁面上，選擇 GraphQL API 的名稱。

1. 在 API 首頁的導覽窗格中，選擇**設定**。

1. 在 **API 組態**中，選擇**編輯**。

1. 在**查詢深度**下，執行下列動作：

   1. 開啟或關閉**啟用查詢深度**。

   1. 在**最大深度**中，設定深度限制。這可以介於 `1`和 之間`75`。

1. 選擇**儲存**。

設定限制時，超過上限將導致`QueryDepthLimitReached`錯誤。例如，下圖顯示深度限制`2`超過第三個 (`L3`) 和第四個 (`L4`) 層級限制的查詢：

![\[Query structure with nested layers L1, L2, L3, and L4, showing depth limit exceeded.\]](http://docs.aws.amazon.com/zh_tw/appsync/latest/devguide/images/query-depth-limit.jpg)


請注意，仍然可以在結構描述中將欄位標記為 null 或不 null。如果非空值欄位收到`QueryDepthLimitReached`錯誤，該錯誤將擲回至第一個空值父欄位。

## 設定解析程式計數限制
<a name="configuration-limits-resolver-count"></a>

您也可以控制每個查詢可以處理的解析程式數量。如同查詢深度，您可以設定此數量的限制。進行包含三個解析程式的下列查詢：

```
query MyQuery {
  resolver1: resolver
  resolver2: resolver
  resolver3: resolver
}
```

根據預設，每個查詢最多可以處理 10000 個解析程式。在上述範例中，`resolver3`將處理 `resolver2`、 `resolver1`和 。不過，您的專案可能會呼叫 ，將每個查詢限制為總共處理一或兩個解析程式。透過設定限制，您可以告訴查詢不要處理任何超過特定數字的解析程式，例如第一個 (`resolver1`) 或第二個 (`resolver2`) 解析程式。

若要新增解析程式計數限制，請執行下列動作：

1. 登入 AWS 管理主控台 並開啟 [AppSync 主控台](https://console.aws.amazon.com/appsync/)。

1. 在 **APIs**頁面上，選擇 GraphQL API 的名稱。

1. 在 API 首頁的導覽窗格中，選擇**設定**。

1. 在 **API 組態**中，選擇**編輯**。

1. 在**解析程式計數限制**下，執行下列動作：

   1. 開啟**啟用解析程式計數**。

   1. 在**解析程式計數上限**中，設定計數限制。這可以介於 `1`和 之間`10000`。

1. 選擇**儲存**。

如同查詢深度限制，超過設定的解析程式限制會導致查詢以其他解析程式的`ResolverExecutionLimitReached`錯誤結束。在下圖中，解析程式計數限制為 *2* 的查詢會嘗試處理三個解析程式。由於限制，第三個解析程式會擲回錯誤且不會執行。

![\[Query with three resolvers, showing error on third resolver due to execution limit reached.\]](http://docs.aws.amazon.com/zh_tw/appsync/latest/devguide/images/resolver-count-limit.jpg)
