使用由 API Gateway 为 REST API 生成的 Java 开发工具包
在此部分中,我们将使用简单结算器 API 作为示例,概述使用由 API Gateway 为 REST API 生成的 Java 开发工具包的步骤。您必须先完成为 API Gateway 中的 REST API 生成 SDK中的步骤,然后才能继续操作。
安装和使用 API Gateway 生成的 Java 开发工具包
-
提取您之前下载的 API Gateway 生成的 .zip 文件中的内容。
-
下载并安装 Apache Maven
(必须为版本 3.5 或更高版本)。 -
下载并安装 JDK 8
。 -
设置
JAVA_HOME
环境变量。 -
转到 pom.xml 文件所在的解压缩的开发工具包文件夹。默认情况下,此文件夹为
generated-code
。运行 mvn install 命令,将编译的构件文件安装到您的本地 Maven 存储库中。这将创建包含编译的开发工具包库的target
文件夹。 -
在空目录中输入以下命令来创建客户端项目存根,以使用已安装的开发工具包库来调用 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
文件作为应用程序的单元测试模板,并且可以根据需要将其他测试代码文件添加到同一个测试文件夹中。 -
在生成的
pom.xml
文件中将程序包依赖关系更新为以下内容,根据需要替换项目的groupId
artifactId
、version
和name
属性:<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>
标记更新到新版本。 -
接下来,我们将介绍如何通过调用开发工具包的
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 方法。