如何建立 Java 呼叫

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

什麼是 Java 呼叫?

Apigee Edge 提供一系列的政策可滿足常見的 API 管理需求,例如 例如安全性、資料轉換和流量管理等等

但在部分情況下,您的 API 會要求系統未實作自訂行為 和標準政策中的 IP 位址範圍在這類情況下,Apigee 提供數個選項,讓您透過指令碼執行 或是自訂 API 行為其中一種方法是在 Java 中實作所需行為。

如需支援的 Java 版本,請參閱支援 軟體和支援的版本

如何在 Proxy 中使用 Java 程式碼?

Java 呼叫政策可讓您在執行中的 Proxy 流程中呼叫 Java 程式碼。您的 Java 程式碼必須實作特定 Edge 專用的 Java 介面,讓程式碼能夠與 與執行中的 Proxy 通訊舉例來說,Java 方法可取得及設定標頭、查詢 參數、流程變數及 Proxy 目前流程環境內的其他實體。

何時該使用 Java 呼叫?

讓我們來看看 Java 呼叫的實用情況,以及應該在哪些情況下使用 Java 呼叫 或考慮其他方法

首先,請考慮 替代做法

使用 Java 呼叫前,請注意,可能有其他方法可使用 。例如:

  • 如果是簡易作業 (例如向遠端服務發出 HTTP API 呼叫),請考慮使用 服務呼叫政策。請參閱服務呼叫政策
  • 適用於與訊息內容相對簡單的互動,例如修改或擷取訊息 HTTP 標頭、參數或訊息內容,您可以使用 JavaScript 或 Python 語言。

Java 程式碼的用途

Java 呼叫支援以下基本作業:

  • 檢查或操控要求或回應訊息
  • 取得及設定流程變數。您可以使用 Java 方法存取 Edge 流程變數。 如要存取鍵/值對應 (KVM) 資訊,請使用 KVM 政策。 指派 KVM 值至流程變數後,您就可以透過 。
  • 呼叫外部服務
  • 引發錯誤
  • 操控錯誤訊息和狀態碼

Java 不支援的功能 代碼

大部分的系統呼叫都遭到禁止。您不得

  • 允許內部檔案系統讀取或寫入。換句話說,您將無法使用 要讀取/寫入內部檔案系統的 Java 套件;但您可以將外部 IP 位址 遠端呼叫。
  • 取得目前程序、程序清單,或 CPU/記憶體使用率的相關資訊 執行虛擬機器
  • 存取「expressions-1.0.0.jar」和「message-flow-1.0.0.jar」中的原始碼。

雖然部分這類電話可能正常運作,但系統不支援這類電話,因此在該情況下必須自行停用通話功能 。避免在程式碼中發出這類呼叫。

不要使用或依賴 Apigee Edge 隨附的 Java 程式庫。這些程式庫是 但不保證一定會有這個程式庫 如果您使用這類程式庫,請在非實際工作環境的示範中使用 。

Hello Java 摘要

現在就來看一個基本的 Hello World Java 呼叫範例。本例中,我們要建立 簡單的 Proxy,搭配 Java 呼叫,該呼叫會傳回「hello world」回應。Proxy 會傳回一個 可能的回應方式

  • 如果傳入「使用者名稱」含有「name」的標頭值,Proxy 會傳回:

    Hello, <name>!
    
  • 如果您省略標頭,則 Proxy 只會傳回:

    "Hello, Guest!"
    

下載範例專案

為簡化相關作業,我們在 Apigee 中的 GitHub 為您準備了基本專案 api-platform-samples 存放區。

  1. 下載 api-platform-samples 或複製到您的系統。
  2. 使用慣用的終端機或程式碼編輯器前往 api-platform-samples/doc-samples/java-hello 項專案。

編寫 Java 程式碼

  1. 開啟 Java 來源檔案:java-hello/callout/src/main/java/HelloJava.java。 這個檔案是我們將實作的主要 Java 類別架構版本。匯入的 Edge Java 呼叫程式碼需要套件。這些類別提供的方法可讓您 存取 Proxy 執行內容。我們將逐步說明編譯和部署的步驟 這個代碼
    package com.apigeesample;
    
    import com.apigee.flow.execution.ExecutionContext;
    import com.apigee.flow.execution.ExecutionResult;
    import com.apigee.flow.execution.spi.Execution;
    import com.apigee.flow.message.MessageContext;
    
    
    public class HelloJava implements Execution {
    
            public ExecutionResult execute(MessageContext messageContext, ExecutionContext executionContext) {
                    
                    try {
    
                            // Your code here.
                
                return ExecutionResult.SUCCESS;
    
                    } catch (Exception e) {
                            return ExecutionResult.ABORT;
                    }
            }
    
    }
    
  2. 將註解行 // Your code here 替換為以下程式碼:

    String name = messageContext.getMessage().getHeader("username");
    
    if (name != null && name.length()>0) {
            messageContext.getMessage().setContent("Hello, " + name + "!");
            messageContext.getMessage().removeHeader("username");
    } else {
            messageContext.getMessage().setContent("Hello, Guest!");
    }
    
  3. 儲存檔案。


使用 Maven 編譯程式碼

專案已設定完成,方便您使用 Maven 編譯。如要使用 javac,我們會在 Maven 範例中加入範例。

  1. 確認您已安裝 Maven:

    mvn -version
    
  2. 執行 java-hello/buildsetup.sh 指令碼。這個指令碼會將 本機 Maven 存放區中的 JAR 依附元件。
  3. cd 到 java-hello/callout 目錄。
  4. 執行 Maven:

    mvn clean package
    
  5. 您可以驗證 JAR 檔案 edge-custom-policy-java-hello.jar 是否 已複製到 java-hello/apiproxy/resources/java。此為必要位置 您想要透過 Proxy 部署的 JAR 檔案。

使用 javac 編譯 (選用)

在上一節中,您會透過 Maven 指令。或者,如果您想使用 javac 編譯程式碼,也可以 類似以下的內容 (從 java-hello 目錄)。必備 系統會在 java-hello/lib 目錄中提供 JAR 檔案。

  1. cd 至 api-platform-samples/doc-samples/java-hello
  2. 確認路徑中包含 javac。

    javac -version
    
  3. 執行下列 javac 指令:

    javac -d . -classpath ./lib/expressions-1.0.0.jar:./lib/message-flow-1.0.0.jar:. callout/src/main/java/HelloJava.java
    
    這會建立 com/apigeesample/HelloJava.class
  4. 建立一個包含已編譯類別的 JAR 檔案, apiproxy/resources/java 目錄內。這是 JAR 的必要位置 要透過 Proxy 部署的檔案如要這麼做,請執行下列指令: java-hello 目錄中的指令 (別忘了結尾的半形句號)。

    jar cvf apiproxy/resources/java/edge-custom-policy-java-hello.jar -C com .
    

部署並呼叫 Proxy

部署指令碼會在 ./java-hello 目錄中提供。但在執行之前 快速設定

  1. cd 至 api-platform-samples/doc-samples/java-hello
  2. 如果您尚未編輯,請開啟 ../../setup/setenv.sh 檔案並進行編輯 這個名稱會如您的 Apigee 帳戶資訊所示:使用者名稱 (電子郵件地址 (與您的帳戶建立關聯)、機構名稱以及用來建立 API 的網域 。以 Edge Cloud 為例 https://api.enterprise.apigee.com;然而,假設您使用 使用 Edge Private Cloud
  3. 儲存 setenv.sh 檔案。
  4. 執行部署指令碼:

    ./deploy.sh
    
  5. 如果部署成功,請執行叫用指令碼:

    ./invoke.sh
    

    叫用指令碼會呼叫 cURL 指令,如下所示:

    curl  http://$org-$env.$api_domain/java-hello -H "username:Will"
    

    系統會隨即傳回「Hello, Will!

    您可以編輯 invoke.sh 指令碼來變更名稱,或將 cURL 呼叫來移除標頭,則指令會傳回「Hello, Guest!」(Hello, Guest!)。

關於 Proxy

讓我們快速檢查這個 Proxy 中使用的政策。留意政策位置 瞭解它在 Proxy 流程中的定位和原因

「指派訊息」政策

指派訊息政策會附加至 ProxyEndpoint 要求流程。這項服務 複製請求中的使用者名稱標頭,並將其指派給回應。這項作業允許 附加至回應流程的 Java 呼叫政策,以存取使用者名稱標頭 然後使用該標頭的值建立自訂回應主體。

<AssignMessage async="false" continueOnError="false" enabled="true" name="CopyHeader">     
    <DisplayName>CopyHeader</DisplayName>     
    <Copy source="request">         
        <Headers>             
          <Header name="username"/>         
        </Headers>     
    </Copy>     
    <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>     
    <AssignTo createNew="false" transport="http" type="response"/> 
</AssignMessage>

Java 呼叫政策

Java 呼叫政策會附加至回應流程。這是因為 透過自訂 Java 程式碼變更回應標頭和訊息。政策的 ClassName 元素會指定由政策執行的主要類別。ResourceURL 元素是 您建構的 JAR 檔案名稱,已新增至resources/java Proxy 上。

<JavaCallout name="hello-java">         
    <ClassName>com.apigeesample.HelloJava</ClassName>         
    <ResourceURL>java://edge-custom-policy-java-hello.jar</ResourceURL> 
</JavaCallout>

Java 呼叫須知

導入 Java 呼叫時,請注意以下事項:

  • com.apigee.flow.executioncom.apigee.flow.message 個套件。這些套件必須包含在 JAR 檔案中 已封裝和部署容器您可透過管理 UI Proxy 上傳 Java JAR 或是將其加入 API Proxy 的 /resources/java 目錄中 本機開發
  • 實作執行介面。在 API Proxy 中執行的任何 Java 程式碼都必須 執行。
  • Java 呼叫政策不含任何實際程式碼。反之,Java 呼叫政策會參照 Java 的「資源」,您必須封裝在 JAR 中。
  • 要避免的套件名稱:請勿使用 io.apigee 或 在 Java 呼叫中,將 com.apigee 設為套件名稱。這些規定是由 Google 保留 和其他 Apigee 模組
  • 如果您的 Java 呼叫依賴於封裝為獨立 JAR 的額外第三方程式庫 檔案,然後將這些 JAR 檔案也放在 /resources/java 目錄中 確保它們在執行階段能正確載入。
  • 如有多個 JAR,只需將其新增為額外資源即可。您不一定要 會修改政策設定,以參照其他 JAR 檔案。嘗試 /resources/java 就足夠了。
  • 如要進一步瞭解如何上傳 Java JAR,請參閱「資源檔案」。