使用由 API Gateway 產生的 Java 軟體開發套件來執行 REST API - Amazon API Gateway

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

使用由 API Gateway 產生的 Java 軟體開發套件來執行 REST API

在本節中,我們以簡易計算機 API 為例,概述使用 API Gateway 為 REST API 所產生之 Java 軟體開發套件的步驟。繼續之前,您必須完成在 API Gateway 中為 REST API 產生開發套件中的步驟。

安裝及使用 API Gateway 所產生的 Java 軟體開發套件
  1. 將您稍早下載之 API Gateway 所產生的 .zip 檔案內容解壓縮。

  2. 下載並安裝 Apache Maven (必須是 3.5 版或更新版本)。

  3. 下載並安裝 JDK 8

  4. 設定 JAVA_HOME 環境變數。

  5. 前往存放 pom.xml 檔案的解壓縮開發套件資料夾。此資料夾預設為 generated-code。執行 mvn install 命令,將已編譯的成品檔案安裝到您的本機 Maven 儲存庫。這會建立 target 資料夾,其中包含已編譯的開發套件程式庫。

  6. 在空目錄中輸入下列命令建立用戶端專案 Stub,以使用安裝的開發套件程式庫呼叫 API。

    mvn -B archetype:generate \ -DarchetypeGroupdId=org.apache.maven.archetypes \ -DgroupId=examples.aws.apig.simpleCalc.sdk.app \ -DartifactId=SimpleCalc-sdkClient
    注意

    上述命令中加入了分隔符號 \ 以利閱讀。整個命令應該放在一行且不使用分隔符號。

    此命令會建立應用程式 Stub。應用程序存根包含一個pom.xml文件和項目根目錄下的文件src夾(前面的命令中的 SimpleCalc-SDKClient)。一開始有兩個來源檔案:src/main/java/{package-path}/App.javasrc/test/java/{package-path}/AppTest.java。在此範例中,{package-path}examples/aws/apig/simpleCalc/sdk/app。此套件路徑衍生自 DarchetypeGroupdId 值。您可以使用 App.java 檔案作為用戶端應用程式的範本,而且您可以視需要在相同的資料夾中新增其他檔案。您可以使用 AppTest.java 檔案作為應用程式的單元測試範本,而且您可以視需要將其他測試程式碼檔案新增至相同的測試資料夾。

  7. 將所產生 pom.xml 檔案中的套件相依性更新為以下內容,並視需要替代成您專案的 groupIdartifactIdversionname 屬性:

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>examples.aws.apig.simpleCalc.sdk.app</groupId> <artifactId>SimpleCalc-sdkClient</artifactId> <packaging>jar</packaging> <version>1.0-SNAPSHOT</version> <name>SimpleCalc-sdkClient</name> <url>http://maven.apache.org</url> <dependencies> <dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-java-sdk-core</artifactId> <version>1.11.94</version> </dependency> <dependency> <groupId>my-apig-api-examples</groupId> <artifactId>simple-calc-sdk</artifactId> <version>1.0.0</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.5</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.5.1</version> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> </plugins> </build> </project>
    注意

    如果 aws-java-sdk-core 的相依成品有較新版本與以上指定的版本 (1.11.94) 不相容,則必須將 <version> 標籤更新為較新版本。

  8. 接下來,我們將示範如何透過呼叫開發套件的 getABOp(GetABOpRequest req)getApiRoot(GetApiRootRequest req)postApiRoot(PostApiRootRequest req) 方法,使用開發套件來呼叫 API。這些方法分別對應到具有 GET /{a}/{b}/{op} API 請求承載的 GET /?a={x}&b={y}&op={operator}POST /{"a": x, "b": y, "op": "operator"} 方法。

    請更新 App.java 檔案如下:

    package examples.aws.apig.simpleCalc.sdk.app; import java.io.IOException; import com.amazonaws.opensdk.config.ConnectionConfiguration; import com.amazonaws.opensdk.config.TimeoutConfiguration; import examples.aws.apig.simpleCalc.sdk.*; import examples.aws.apig.simpleCalc.sdk.model.*; import examples.aws.apig.simpleCalc.sdk.SimpleCalcSdk.*; public class App { SimpleCalcSdk sdkClient; public App() { initSdk(); } // The configuration settings are for illustration purposes and may not be a recommended best practice. private void initSdk() { sdkClient = SimpleCalcSdk.builder() .connectionConfiguration( new ConnectionConfiguration() .maxConnections(100) .connectionMaxIdleMillis(1000)) .timeoutConfiguration( new TimeoutConfiguration() .httpRequestTimeout(3000) .totalExecutionTimeout(10000) .socketTimeout(2000)) .build(); } // Calling shutdown is not necessary unless you want to exert explicit control of this resource. public void shutdown() { sdkClient.shutdown(); } // GetABOpResult getABOp(GetABOpRequest getABOpRequest) public Output getResultWithPathParameters(String x, String y, String operator) { operator = operator.equals("+") ? "add" : operator; operator = operator.equals("/") ? "div" : operator; GetABOpResult abopResult = sdkClient.getABOp(new GetABOpRequest().a(x).b(y).op(operator)); return abopResult.getResult().getOutput(); } public Output getResultWithQueryParameters(String a, String b, String op) { GetApiRootResult rootResult = sdkClient.getApiRoot(new GetApiRootRequest().a(a).b(b).op(op)); return rootResult.getResult().getOutput(); } public Output getResultByPostInputBody(Double x, Double y, String o) { PostApiRootResult postResult = sdkClient.postApiRoot( new PostApiRootRequest().input(new Input().a(x).b(y).op(o))); return postResult.getResult().getOutput(); } public static void main( String[] args ) { System.out.println( "Simple calc" ); // to begin App calc = new App(); // call the SimpleCalc API Output res = calc.getResultWithPathParameters("1", "2", "-"); System.out.printf("GET /1/2/-: %s\n", res.getC()); // Use the type query parameter res = calc.getResultWithQueryParameters("1", "2", "+"); System.out.printf("GET /?a=1&b=2&op=+: %s\n", res.getC()); // Call POST with an Input body. res = calc.getResultByPostInputBody(1.0, 2.0, "*"); System.out.printf("PUT /\n\n{\"a\":1, \"b\":2,\"op\":\"*\"}\n %s\n", res.getC()); } }

    在上述範例中,用來執行個體化開發套件用戶端的組態設定僅供說明,不一定是建議的最佳實務。此外,呼叫 sdkClient.shutdown() 是選擇性的,特別是如果您需要精確控制何時釋放資源。

我們已示範使用 Java 開發套件呼叫 API 的基本模式。您可以延伸說明來呼叫其他 API 方法。