本頁適用於 Apigee 和 Apigee Hybrid。
查看
Apigee Edge 說明文件。
變更目標端點後,您就可以在 Proxy 中新增政策。
政策是 Apigee 元件,可透過 API Proxy 附加至訊息流程的不同位置。政策可轉換訊息格式、強制執行存取權控管、呼叫遠端服務、授權使用者、檢查訊息內容是否有潛在威脅,以及執行其他多項操作。
在本教學課程中,您將在 Proxy 中新增 XMLtoJSON 政策。這項政策會將 XML 訊息的酬載轉換為 JSON。也會變更回應的 Content-Type
標頭。
您可以在 Proxy 中將政策附加至流程。流程會控管政策的執行方式。在這個範例中,您會將政策新增至名為「PreFlow」PreFlow的特殊流程。PreFlow 中的政策會在 Proxy 中的任何其他政策之前執行。您不必深入瞭解流程才能閱讀本例,但如要進一步瞭解流程,請參閱「使用流程控管 API Proxy」一文。
全新 Proxy 編輯器
將 XMLtoJSON 政策新增至 Proxy 有兩個步驟:
建立政策的例項
如要使用政策,您必須先根據政策範本建立政策的新例項,如下所示:
如果您使用的是 Cloud 控制台中的 Apigee UI:請依序選取「Proxy development」>「API Proxies」。
如果您使用的是傳統 Apigee UI:請依序選取「Develop」>「API Proxies」,然後在「Proxies」窗格中選取 Proxy 的環境。
- 從 Proxy 清單中選取要新增政策的 Proxy。
按一下「開發」分頁標籤。
- 在左側窗格中,按一下「政策」資料夾旁的「+」按鈕。
- 在「Create policy」對話方塊中,選取「Standard policies」,即可依政策類型篩選可用的政策清單。
- 在「Select policy type」文字方塊中,向下捲動至「Mediation」,然後選取「XML To JSON」。
您可以視需要變更政策的名稱和顯示名稱。 根據預設,Apigee 會為政策名稱提供簡短的前置字串,在本例中為 X2J-。您可以在前置字串後方加上一系列以破折號分隔的描述性字詞。請參閱 命名慣例。
完成後,按一下「建立」即可建立政策。
「開發」檢視畫面的右側窗格現在會顯示 XML 到 JSON 政策:
窗格下半部會顯示政策的 XML 程式碼。
如要進一步瞭解政策,請選取政策名稱旁邊的資訊圖示 ,然後按一下「XML 到 JSON 政策」。系統會顯示政策的參考頁面。
使用 Gemini Code Assist 檢查政策指示
如果您有 Gemini Code Assist 外掛程式,可以醒目顯示政策元素,查看該元素的相關資訊和使用方式。如需瞭解相關資訊,請參閱「使用 Gemini Code Assist 程式碼說明政策」。
變更政策名稱
如要變更政策名稱,請按照下列步驟操作:
- 在左側窗格中的「政策」下方選取所需政策。
- 在政策的 XML 程式碼中,在政策名稱縮寫後面的 <DisplayName> 元素中,新增政策的描述性短語,例如 change-xml-to-json:
系統會自動更新政策名稱,並顯示在「政策」下方。
請參閱「 命名慣例」。
將政策附加至 PreFlow 中的步驟
建立 XML 轉換為 JSON 政策後,您可以將該政策附加至 PreFlow 中的步驟:
- 在左側窗格中,依序選取「Proxy Endpoints」>「default」>「PreFlow」:
注意:您可能需要展開右側窗格中的視覺編輯器,才能查看所有元素。如要這麼做,請按一下並稍微向下拖曳視覺編輯器和文字編輯器之間的分隔線。
- 在視覺編輯器右下方的「回覆」窗格中,按一下「PreFlow」旁的「+」按鈕:
- 在「新增政策步驟」對話方塊中,選取「X2J-change-xml-to-json」X2J-change-xml-to-json政策。
按一下「新增」,附加政策。
「Response」窗格現在會顯示 X2J-change-xml-to-json 政策:
- 按一下「儲存」,即可儲存目前修訂版本的變更內容。
- 如要將變更內容部署至修訂版本,請按一下「Deploy」(部署),然後按照「 Deploy an API proxy」中的操作說明進行。
傳統 Proxy 編輯器
如要將 XMLtoJSON 政策新增至 Proxy,請按照下列步驟操作:
- 在瀏覽器中開啟 Apigee UI 並登入。
- 按一下主視窗中的「API Proxy」,然後選取 Proxy。在本例中,請選取您在步驟 2:建立 API Proxy 中建立的 Proxy。
按一下「開發」分頁標籤:
Apigee 會顯示 API Proxy 編輯器。
在「Navigator」窗格中,依序按一下「Proxy Endpoints」>「default」>「PreFlow」:
Apigee 會顯示流程編輯器:
此外,Apigee 會在「Code」窗格中顯示預設 Proxy 端點設定:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <ProxyEndpoint name="default"> <Description/> <FaultRules/> <PreFlow name="PreFlow"> <Request/> <Response/> </PreFlow> <PostFlow name="PostFlow"> <Request/> <Response/> </PostFlow> <Flows/> <HTTPProxyConnection> <BasePath>/myproxy</BasePath> <Properties/> <VirtualHost>default</VirtualHost> <VirtualHost>secure</VirtualHost> </HTTPProxyConnection> <RouteRule name="default"> <TargetEndpoint>default</TargetEndpoint> </RouteRule> </ProxyEndpoint>
- 如要在 Proxy 中新增政策,請在回應 PreFlow (流程編輯器的下半部) 中按一下「+ 步驟」按鈕:
Apigee 會在「Add」對話方塊中顯示分類的政策清單,供您新增至流程:
- 向下捲動,然後在「中介服務」類別中選取「XMLtoJSON」XMLtoJSON政策。
保留預設名稱,然後按一下「新增」。
Apigee 會將新政策附加至回應的 PreFlow:
請注意,當您點選「Add」時,Apigee 會執行以下操作:
- 在「Navigator」窗格中的「Policies」下方新增新政策。
- 在「流程」窗格中新增 XMLtoJSON 政策。
- 在「Code」窗格中顯示政策的 XML 設定。
- 按一下「儲存」,即可儲存目前修訂版本的變更內容。
- 如要部署變更,請按一下「總覽」分頁標籤,然後按一下「部署」按鈕。
測試新政策
如要測試新政策,請在終端機視窗中執行下列 curl
指令:
curl https://YOUR_ENV_GROUP_HOSTNAME/myproxy
其中 YOUR ENV_GROUP_HOSTNAME
是環境群組主機名稱。請參閱「
找出環境群組主機名稱」一文。
詳情請參閱「 呼叫 API Proxy」。
或者,您也可以在瀏覽器中開啟相同的網址。
您應該會收到下列回應內容:
{ "root": { "city": "San Jose", "firstName": "John", "lastName": "Doe", "state": "CA" } }
如果回應主體不符合上述格式,請檢查以下事項:
- 您的目標端點為
https://mocktarget.apigee.net/xml
,如步驟 4:變更目標端點所述:- 如果您收到
Hello, Guest!
做為回應,則需要將/xml
附加至目標端點的結尾。 - 如果您收到
404
,請確認您存取的是apigee.net
,而非apigee.com
。
- 如果您收到
- 已部署最新的 Proxy 修訂版本。請嘗試重新部署 API Proxy,如「部署 API Proxy」和「取消部署 API Proxy」一節所述。
如要查看 HTTP 要求和回應標頭,請使用 -vs
選項在 curl
中啟用詳細資訊 (v
會使回應變得冗長,但 s
會抑制一些不太重要的詳細資料)。以下範例假設 Proxy 名稱為 myproxy
::
curl -vs https://YOUR_ENV_GROUP_HOSTNAME/myproxy | python -m json.tool
您應該會收到類似以下的回應。請注意,回應中的 Content-Type
標頭為 application/json
。XMLtoJSON 政策會在傳回回應前變更標頭。
* Trying 10.20.30.40... * TCP_NODELAY set * Connected to apitest.acme.com (10.20.30.40) port 443 (#0) ... > GET /myproxy HTTP/1.1 > Host: apitest.acme.com > User-Agent: curl/7.58.0 > Accept: */* > < HTTP/1.1 200 OK < Date: Fri, 25 May 2018 16:20:00 GMT < Content-Type: application/json;charset=UTF-8 < Content-Length: 77 < Connection: keep-alive < X-Powered-By: Apigee < Access-Control-Allow-Origin: * ... { [77 bytes data] { "root": { "city": "San Jose", "firstName": "John", "lastName": "Doe", "state": "CA" } }