使用由 API Gateway 为 REST API 生成的 Java 开发工具包 - Amazon API Gateway

使用由 API Gateway 为 REST API 生成的 Java 开发工具包

在此部分中,我们将使用简单结算器 API 作为示例,概述使用由 API Gateway 为 REST API 生成的 Java 开发工具包的步骤。您必须先完成为 API Gateway 中的 REST API 生成 SDK中的步骤,然后才能继续操作。

安装和使用 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. 在空目录中输入以下命令来创建客户端项目存根,以使用已安装的开发工具包库来调用 API。

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

    为提高可读性,在上述命令中添加了分隔符 \。整个命令应在一行中且不带分隔符。

    此命令会创建一个应用程序存根。应用程序存根在项目的根目录(上述命令中的 SimpleCalc-sdkClient)下包含一个 pom.xml 文件和一个 src 文件夹。最初,有两个源文件: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 文件中将程序包依赖关系更新为以下内容,根据需要替换项目的 groupId artifactIdversionname 属性:

    <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}GET /?a={x}&b={y}&op={operator}POST / 方法对应,具有 {"a": x, "b": y, "op": "operator"} API 请求的负载。

    按如下所示更新 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 方法。