使用 API 部署 API Proxy

查看 Apigee Edge 說明文件。
前往 Apigee X說明文件
資訊

每個機構都有獨特的軟體開發生命週期 (SDLC)。這通常需要 ,讓 API Proxy 部署項目與後端服務所用的程序保持同步。

本主題中示範的 Edge API 方法可用來整合 API Proxy 管理貴機構的 SDLC。這個 API 的常見用途是編寫指令碼或程式碼 負責部署 API Proxy,或是將 API Proxy 從一個環境遷移至另一個環境 大型自動化程序,一併部署或遷移其他應用程式。

Edge API 不會對您的 SDLC 做出任何假設,或對其他任何人員的假設。 而是公開可由開發團隊協調的原子功能,以將作業自動化 並最佳化 API 開發生命週期

詳情請參閱 Edge API

如要使用 Edge API,您必須在呼叫中驗證身分。方法如下: 您可以選擇下列其中一種做法:

本主題重點介紹用於管理 API Proxy 的 API 組合,

影片:觀看這部短片,瞭解如何部署 API。

與 API 互動

下列步驟會逐步引導您完成簡單的 API 互動。

列出貴機構的 API

您可以先列出貴機構中所有的 API Proxy。(記得更換 「EMAIL:PASSWORD」和「ORG_NAME」項目。如需指示,請參閱: 使用 Edge API

curl -u EMAIL:PASSWORD \
  https://api.enterprise.apigee.com/v1/o/ORG_NAME/apis

回應範例:

[ "weatherapi" ]

取得 API

您可以在貴機構的任何 API Proxy 上呼叫 GET 方法。這項呼叫會傳回 API Proxy 的所有可用修訂版本。

curl -u EMAIL:PASSWORD -H "Accept: application/json" \
  https://api.enterprise.apigee.com/v1/o/ORG_NAME/apis/weatherapi

回應範例:

{
  "name" : "weatherapi",
  "revision" : [ "1" ]
}

這個方法只會傳回 API Proxy 名稱及相關 revision,所以具有相關聯的數字。API Proxy 包含一組設定 檔案。修訂版本是方便管理設定的更新機制 反覆改進修訂版本會依序編號,您可以透過部署來還原變更 先前的 API Proxy 修訂版本此外,您也可以將 API Proxy 修訂版本部署至 正式環境,同時繼續在測試中為該 API Proxy 建立新的修訂版本 環境。準備就緒後,即可從 測試環境。

這個範例中只有一個修訂版本,因為剛才已建立 API Proxy。以 API 的形式 Proxy 會經歷疊代設定和部署作業的生命週期 (修訂版本編號) 值。使用直接 API 呼叫進行部署時,您可以選擇遞增 API Proxy 修訂版本編號有時即使稍微小幅變更 遞增修訂版本。

取得 API 修訂版本

API 版本 (例如 api.company.com/v1) 應會大幅改變 這並非易事您逐步增加 API 版本時,就會向開發人員表示 明顯變更 API 公開的外部介面簽名。

API Proxy 修訂版本是與 API Proxy 相關聯的遞增號碼 此外還會從 0 自動調整資源配置 您完全不必調整資源調度設定API 服務會保留您的設定修訂版本,因此您可以 避免設定發生問題根據預設,API Proxy 的修訂版本會自動更新 在每次您使用 Import an API Proxy API 匯入 API Proxy 時遞增。如果發生以下情況: 如果不想累加 API Proxy 修訂版本,請使用 Update API Proxy 修訂版本 API。如果您使用 Maven 進行部署,請使用 cleanupdate 選項 (如 Maven 外掛程式中所述) readme

舉例來說,您可以在 API Proxy 修訂版本 1 上呼叫 GET 方法,以取得詳細檢視畫面。

curl -u EMAIL:PASSWORD -H "Accept:application/json" \
  https://api.enterprise.apigee.com/v1/o/ORG_NAME/apis/weatherapi/revisions/1

回應範例

{
  "configurationVersion" : {
    "majorVersion" : 4,
    "minorVersion" : 0
  },
  "contextInfo" : "Revision 1 of application weatherapi, in organization {org_name}",
  "createdAt" : 1343178905169,
  "createdBy" : "andrew@apigee.com",
  "lastModifiedAt" : 1343178905169,
  "lastModifiedBy" : "andrew@apigee.com",
  "name" : "weatherapi",
  "policies" : [ ],
  "proxyEndpoints" : [ ],
  "resources" : [ ],
  "revision" : "1",
  "targetEndpoints" : [ ],
  "targetServers" : [ ],
  "type" : "Application"
}

如需這些 API Proxy 設定元素的詳細資訊,請參閱 API Proxy 設定參考資料

將 API 部署至 環境

設定 API Proxy 正確接收和轉送要求後,您就可以部署 Proxy 一或多個環境您通常可以在 test 中對 API Proxy 進行疊代作業 您將 API Proxy 修訂版本「升級」prod。通常您會發現 測試環境中 API Proxy 的修訂版本,主要原因在於 在正式環境中執行疊代

將 API Proxy 部署至環境後,才能叫用該 Proxy。 將 API Proxy 修訂版本部署至實際工作環境,接著您就能將 prod 網址發布至外部 開發人員。

如何列出環境

Apigee Edge 中的每個機構至少都有兩個環境:testprod。 您可以任意區隔目的是提供一個區塊,方便驗證 API Proxy 確認一切運作正常,再向外部開發人員開放

每個環境實際上都只是網路位址,可讓您隔離 您正在處理的 API Proxy,以及應用程式在執行階段存取的 API Proxy。

環境也提供資料和資源區隔。例如,您可以設定 測試和實際工作環境中的不同快取,只有執行於該程式的 API Proxy 才能存取 環境。

查看 機構組織

curl -u EMAIL:PASSWORD \
  https://api.enterprise.apigee.com/v1/o/ORG_NAME/environments

回應範例

[ "test", "prod" ]
敬上

探索部署項目

「部署作業」是已部署在環境中的 API Proxy 修訂版本。API 您可以透過網路存取處於 已部署狀態的 Proxy,也就是 該環境的 <VirtualHost> 元素。

部署 API Proxy

必須先部署 API Proxy,才能叫用 API。API 服務會公開符合 REST 樣式的 API 可讓您控管部署程序

單一環境中一次只能部署一項 API Proxy 修訂版本。因此 就必須取消部署已部署的修訂版本您可以控制是否部署新套件 或覆寫現有的修訂版本。

您目前查看的是 Apigee Edge 說明文件。
參閱 Apigee X 說明文件
資訊

首先,請取消部署現有的修訂版本。指定環境名稱和修訂版本編號 要取消部署的 API Proxy:

curl -X DELETE \
  https://api.enterprise.apigee.com/v1/o/ORG_NAME/environments/ENV_NAME/apis/API_NAME/revisions/REVISION_NUMBER/deployments \
  -u EMAIL:PASSWORD

然後部署新的修訂版本。新的 API Proxy 修訂版本必須已存在:

curl -X POST -H "Content-type:application/x-www-form-urlencoded" \
  https://api.enterprise.apigee.com/v1/o/ORG_NAME/environments/ENV_NAME/apis/API_NAME/revisions/REVISION_NUMBER/deployments \
  -u EMAIL:PASSWORD
敬上

輕鬆部署 (完全無需停機)

如要盡可能降低部署期間發生停機時間的可能性,請使用 override 參數 並將其設為 true

您無法逐一部署 API Proxy 修訂版本。第一個必須永遠 將 override 設定為 true,表示 1 個修訂版本 的 API Proxy 應透過目前部署的修訂版本部署。結果就是 部署順序相反,新的修訂版本會部署新的修訂版本 完成,系統便會取消部署已部署的修訂版本。

以下範例會將 override 值做為表單參數傳遞以設定:

curl -X POST -H "Content-type:application/x-www-form-urlencoded" \
  https://api.enterprise.apigee.com/v1/o/ORG_NAME/e/ENV_NAME/apis/API_NAME/revisions/REVISION_NUMBER/deployments" \
  -d "override=true" \
  -u EMAIL:PASSWORD

您可以設定 delay 參數,進一步最佳化部署作業。 delay 參數指定上一個時間間隔 (以秒為單位) 應取消部署這是因為處理中的交易在 取消部署 API Proxy 處理交易前所要完成的請求。追蹤對象為 override=truedelay 參數組合的結果:

  • 修訂版本 1 正在處理要求。
  • 系統正在平行部署修訂版本 2。
  • 完整部署修訂版本 2 後,新流量會傳送至修訂版本 2。無新流量 已傳送至修訂版本 1。
  • 不過,修訂版本 1 可能仍在處理現有的交易,透過設定 delay 參數 (例如 15 秒) 時,您將修訂版本 1 15 秒提供給 完成現有交易的處理程序
  • 延遲時間過後,修訂版本 1 就會取消部署。
,瞭解如何調查及移除這項存取權。
curl -X POST -H "Content-type:application/x-www-form-urlencoded" \
  https://api.enterprise.apigee.com/v1/o/ORG_NAME/e/ENV_NAME/apis/API_NAME/revisions/REVISION_NUMBER/deployments?delay=15" \
  -d "override=true" \
  -u EMAIL:PASSWORD
查詢參數 說明
override

預設值為 false (一般部署行為:未部署現有修訂版本), 就會部署新的修訂版本)。

設為 true 即可覆寫正常的部署作業行為,並順暢地部署 可能面臨擴充性、監控、持續整合 和部署等方面的挑戰在新修訂版本還在部署期間,維持現有修訂版本 部署。部署新的修訂版本時,舊的修訂版本會取消部署。使用位置 與 delay 參數搭配使用,控制取消部署的時機 會發生什麼事

delay

允許在現有修訂版本之前完成交易處理程序 以避免發生 502 Bad Gateway504 Gateway Timeout errors:將這項參數設為您要取消部署的秒數 延遲時間。可設定的秒數沒有限制,也沒有 設定大量秒數對效能產生的影響在延遲期間 就能將流量傳送至舊版本

預設值為 0 (零) 秒。如果 override 設為 true 且 delay 為 0,系統會在新的修訂版本完成後立即取消部署現有的修訂版本 先前的版本系統會將負值視為 0 (零) 秒處理。

override=truedelay 搭配使用時,HTTP 5XX 刪除作業期間的回應這是因為兩個 API Proxy 修訂版本都會 並同時取消部署較舊的修訂版本

查看 API 的所有部署項目 修訂版本

有時候需要擷取 API 目前部署所有修訂版本的清單 Proxy 上。

curl https://api.enterprise.apigee.com/v1/o/ORG_NAME/apis/weatherapi/revisions/1/deployments \
  -u EMAIL:PASSWORD
{
  "aPIProxy" : "weatherapi",
  "environment" : [ {
    "configuration" : {
      "basePath" : "",
      "steps" : [ ]
    },
    "name" : "test",
    "server" : [ {
      "status" : "deployed",
      "type" : [ "message-processor" ],
      "uUID" : "90096dd1-1019-406b-9f42-fbb80cd01200"
    }, {
      "status" : "deployed",
      "type" : [ "message-processor" ],
      "uUID" : "7d6e2eb1-581a-4db0-8045-20d9c3306549"
    }, {
      "status" : "deployed",
      "type" : [ "router" ],
      "uUID" : "1619e2d7-c822-45e0-9f97-63882fb6a805"
    }, {
      "status" : "deployed",
      "type" : [ "router" ],
      "uUID" : "8a5f3d5f-46f8-4e99-b4cc-955875c8a8c8"
    } ],
    "state" : "deployed"
  } ],
  "name" : "1",
  "organization" : "org_name"
}

上述回應包含 Apigee 內部基礎架構的許多特定屬性 邊緣除非您使用 Apigee Edge 地端部署,否則無法變更這些設定。

回應中包含的重要屬性是 organizationenvironmentaPIProxynamestate。變更者: 檢閱這些屬性值之後,您可以確認特定的 API Proxy 修訂版本 部署於環境中

如要查看所有部署項目,請參閱 測試環境

您也可以擷取特定環境 (包括修訂版本) 的部署狀態 數量),接著使用以下呼叫:

curl -u EMAIL:PASSWORD
  https://api.enterprise.apigee.com/v1/o/ORG_NAME/environments/test/deployments

這會針對測試環境中部署的每個 API 傳回與上述結果相同的結果

查看以下項目中的所有部署項目: 機構組織

如要擷取所有環境中目前部署的所有 API Proxy 修訂版本清單, 請使用下列 API 方法:

curl https://api.enterprise.apigee.com/v1/o/ORG_NAME/deployments \
  -u EMAIL:PASSWORD

在所有環境中部署的所有 API Proxy 都會傳回與上述相同的結果。

由於 API 符合 REST 樣式,因此您可以直接使用 POST 方法,搭配 JSON 或 XML 以建立 API Proxy。

系統會產生 API Proxy 設定檔。API Proxy 的預設表示法是 JavaScript 物件標記法 (JSON)。以下是上述 POST 要求的預設 JSON 回應。 這個 API 建立了名為 weatherapi 的 API Proxy設定檔中每個元素的說明 如下:

{
  "configurationVersion" : {
    "majorVersion" : 4,
    "minorVersion" : 0
  },
  "contextInfo" : "Revision 1 of application weatherapi, in organization {org_name}",
  "createdAt" : 1357172145444,
  "createdBy" : "you@yourcompany.com",
  "displayName" : "weatherapi",
  "lastModifiedAt" : 1357172145444,
  "lastModifiedBy" : "you@yourcompany.com",
  "name" : "weatherapi",
  "policies" : [ ],
  "proxyEndpoints" : [ ],
  "resources" : [ ],
  "revision" : "1",
  "targetEndpoints" : [ ],
  "targetServers" : [ ],
  "type" : "Application"
}
敬上

系統產生的 API Proxy 設定檔會顯示 API 的完整結構 Proxy:

  • APIProxy revision:API Proxy 的疊代疊代作業 完全由 API 服務維護
  • APIProxy name:API Proxy 的專屬名稱
  • ConfigurationVersion:API Proxy 的 API 服務版本 設定必須符合
  • CreatedAt:產生 API Proxy 的時間,以 UNIX 時間格式
  • CreatedBy:建立 API 的 Apigee Edge 使用者電子郵件地址 Proxy
  • DisplayName:API Proxy 的易記名稱
  • LastModifiedAt:產生 API Proxy 的時間,格式為 UNIX 經過時間
  • LastModifiedBy:建立 API 的 Apigee Edge 使用者電子郵件地址 Proxy
  • Policies:已新增至這個 API Proxy 的政策清單
  • ProxyEndpoints:已命名 ProxyEndpoint 的清單
  • Resources:這份清單中,可供讀取的資源 (JavaScript、Python、Java、XSLT) 會在這個 API Proxy 中執行
  • TargetServers:具名 TargetServers 的清單,可使用 Management API),用於負載平衡用途的進階設定
  • TargetEndpoints:已命名 TargetEndpoint 的清單

請注意,許多透過簡易 POST 建立的 API Proxy 設定元素 上述方法沒有任何內容。在下列主題中,您將瞭解如何新增及設定鍵 API Proxy 元件

您也可以參閱 API Proxy 設定參考資料,瞭解這些設定元素。

針對 API 編寫指令碼

使用範例 API Proxy GitHub 提供的殼層指令碼可用來包裝 Apigee 部署工具。如果出於某種原因 您無法使用 Python 部署工具,然後再直接呼叫 API。這兩種做法 如下方指令碼範例所示

包裝部署工具

首先,請確認 Python 部署工具 可用的虛擬機器。

然後建立檔案來存放憑證。您編寫的部署指令碼 方便您集中管理帳戶憑證。在 API 中 平台範例,這個檔案稱為 setenv.sh

#!/bin/bash

org="Your ORG on enterprise.apigee.com"
username="Your USERNAME on enterprise.apigee.com"

# While testing, it's not necessary to change the setting below
env="test"
# Change the value below only if you have an on-premise deployment
url="https://api.enterprise.apigee.com"
# Change the value below only if you have a custom domain
api_domain="apigee.net"

export org=$org
export username=$username
export env=$env
export url=$url
export api_domain=$api_domain

上方檔案提供所有設定給包裝部署的殼層指令碼 如果偏好在終端機視窗中工作 可使用 Google Cloud CLI gcloud 指令列工具

現在,請建立用於匯入設定的殼層指令碼,並使用這些設定呼叫部署工具。 (如需範例,請參閱 Apigee API 平台範例))。

#!/bin/bash

source path/to/setenv.sh

echo "Enter your password for the Apigee Enterprise organization $org, followed by [ENTER]:"

read -s password

echo Deploying $proxy to $env on $url using $username and $org

path/to/deploy.py -n {api_name} -u $username:$password -o $org -h $url -e $env -p / -d path/to/apiproxy

為了方便起見,也建議您建立指令碼來叫用及測試 API,如 如下:

#!/bin/bash

echo Using org and environment configured in /setup/setenv.sh

source /path/to/setenv.sh

set -x

curl "http://$org-$env.apigee.net/{api_basepath}"

直接叫用 API

編寫簡單的 shell 指令碼,自動上傳和 和部署 API Proxy

以下指令碼直接叫用 Management API。可將現有的修訂版本取消部署 如果要更新的 API Proxy,請從 /apiproxy 目錄建立 ZIP 檔案 ,然後上傳、匯入及部署 此外還會從 0 自動調整資源配置 您完全不必調整資源調度設定

#!/bin/bash

#This sets the name of the API proxy and the basepath where the API will be available
api=api

source /path/to/setenv.sh

echo Delete the DS_store file on OSX

echo find . -name .DS_Store -print0 | xargs -0 rm -rf
find . -name .DS_Store -print0 | xargs -0 rm -rf

echo "Enter your password for the Apigee Enterprise organization $org, followed by [ENTER]:"

read -s password

echo Undeploy and delete the previous revision

# Note that you need to explicitly update the revision to be undeployed.
# One benefit of the Python deploy tool is that it manages this for you.

curl -k -u $username:$password "$url/v1/o/$org/e/$env/apis/$api/revisions/1/deployments" -X DELETE

curl -k -u $username:$password -X DELETE "$url/v1/o/$org/apis/$api/revisions/1"

rm -rf $api.zip

echo Create the API proxy bundle and deploy

zip -r $api.zip apiproxy

echo Import the new revision to $env environment 

curl -k -v -u $username:$password "$url/v1/o/$org/apis?action=import&name=$api" -T $api.zip -H "Content-Type: application/octet-stream" -X POST

echo Deploy the new revision to $env environment 

curl -k -u $username:$password "$url/v1/o/$org/e/$env/apis/$api/revisions/1/deployments" -X POST