API 管理中的後端

適用於:所有 API 管理 層

API 管理中的「後端」 (或 API 後端) 是一種 HTTP 服務,可實作您的前端 API 及其作業。

匯入特定 API 時,API 管理會自動設定 API 後端。 例如,API 管理在匯入時設定後端 Web 服務:

API 管理也支援使用其他 Azure 資源做為 API 後端,例如:

後端的優點

API 管理 支援後端實體,因此您可以管理 API 的後端服務。 後端實體會封裝後端服務的相關信息,促進跨 API 的重複使用性,以及改善的治理。

針對下列其中一或多個使用後端:

  • 授權對後端服務的要求認證
  • 如果已針對標頭或查詢參數驗證設定具名值,請利用 API 管理 功能來維護 Azure 金鑰保存庫 中的秘密。
  • 定義斷路器規則,以保護後端免於太多要求
  • 將要求路由或負載平衡至多個後端

設定和管理 Azure 入口網站 中的後端實體,或使用 Azure API 或工具。

使用 set-backend-service 原則參考後端

建立後端之後,您可以在 API 中參考後端。 使用原則 set-backend-service 將連入 API 要求導向後端。 如果您已為 API 設定後端 Web 服務,您可以使用原則 set-backend-service ,改為將要求重新導向至後端實體。 例如:

<policies>
    <inbound>
        <base />
        <set-backend-service backend-id="myBackend" />
    </inbound>
    [...]
<policies/>

您可以搭配 set-backend-service 原則使用條件式邏輯,根據所呼叫的位置、閘道或其他運算式來變更有效的後端。

例如,以下是根據所呼叫閘道將流量路由傳送至另一個後端的原則:

<policies>
    <inbound>
        <base />
        <choose>
            <when condition="@(context.Deployment.Gateway.Id == "factory-gateway")">
                <set-backend-service backend-id="backend-on-prem" />
            </when>
            <when condition="@(context.Deployment.Gateway.IsManaged == false)">
                <set-backend-service backend-id="self-hosted-backend" />
            </when>
            <otherwise />
        </choose>
    </inbound>
    [...]
<policies/>

斷路器 (預覽)

從 API 版本 2023-03-01 開始,API 管理會在後端資源中公開斷路器屬性,以保護後端服務免於處理太多要求。

  • 斷路器屬性會定義規則來中斷斷路器,例如定義時間間隔期間失敗狀況的數目或百分比,以及指出失敗的狀態代碼範圍。
  • 斷路器跳脫時,API 管理會在定義的時間內停止將要求傳送至後端服務,並將 503 服務無法使用的回應傳回給用戶端。
  • 設定的跳脫持續時間之後,線路會重設,流量會繼續傳到後端。

後端斷路器是斷路器模式的實作,可讓後端從多載情況復原。 其可增強一般速率限制並行限制原則,您可以實作這些原則來保護 API 管理閘道和後端服務。

注意

  • 目前,API 管理的取用層不支援後端斷路器。
  • 由於 API 管理架構的分散式本質,斷路器跳脫規則大致近似。 網路閘道的不同執行個體不會同步處理,而且會根據相同執行個體上的資訊套用斷路器規則。

範例

使用 API 管理 REST API 或 Bicep 或 ARM 範本,在後端設定斷路器。 在下列範例中,有三個以上的 5xx 狀態代碼指出一天中的伺服器錯誤時,管理執行個體 myAPIMmyBackend 中的斷路器會跳脫。 斷路器會在一小時後重設。

在具有斷路器的後端資源的 Bicep 範本中包含類似下面的程式碼片段:

resource symbolicname 'Microsoft.ApiManagement/service/backends@2023-03-01-preview' = {
  name: 'myAPIM/myBackend'
  properties: {
    url: 'https://mybackend.com'
    protocol: 'https'
    circuitBreaker: {
      rules: [
        {
          failureCondition: {
            count: 3
            errorReasons: [
              'Server errors'
            ]
            interval: 'P1D'
            statusCodeRanges: [
              {
                min: 500
                max: 599
              }
            ]
          }
          name: 'myBreakerRule'
          tripDuration: 'PT1H'
        }
      ]
    }
   }
 }

負載平衡集區 (預覽)

從 API 2023-05-01 版開始,您想要針對 API 實作多個後端,並跨這些後端平衡要求時,API 管理支援後端集區。 後端集區目前支援循環配置資源負載平衡。

針對下列案例使用後端集區:

  • 將負載分散到多個後端,這可能會有個別的後端斷路器。
  • 將負載從一組後端轉移到另一組後端以進行升級 (藍綠部署)。

若要建立後端集區,請將後端的 type 屬性設定為 pool,並指定組成集區的後端清單。

注意

  • 目前,您只能在後端集區中包含單一後端。 您無法將類型 pool 的後端新增至另一個後端集區。
  • 由於 API 管理架構的分散式本質,後端負載平衡大致近似。 網路閘道的不同執行個體不會同步處理,而且會根據相同執行個體上的資訊進行負載平衡。

範例

使用 API 管理 REST API 或 Bicep 或 ARM 範本來設定後端集區。 在下列範例中,API 管理執行個體 myAPIM 中的後端 myBackendPool 會設定為後端集區。 集區中的範例後端名為 backend-1backend-2

在具有負載平衡集區的後端資源的 Bicep 範本中包含類似下面的程式碼片段:

resource symbolicname 'Microsoft.ApiManagement/service/backends@2023-05-01-preview' = {
  name: 'myAPIM/myBackendPool'
  properties: {
    description: 'Load balancer for multiple backends'
    type: 'Pool'
    protocol: 'http'
    url: 'https://example.com'
    pool: {
      services: [
        {
          id: '/backends/backend-1'
        }
        {
          id: '/backends/backend-2'
        }
      ]
    }
  }
}

限制

對於開發人員進階層,當閘道端點 URL 與後端 URL 相同時,內部虛擬網路中部署的 API 管理執行個體會擲出 HTTP 500 BackendConnectionFailure 錯誤。 如果發生此限制,請遵循 Tech Community 部落格中內部虛擬網路模式中自我鏈結 API 管理要求限制一文中的指示。