REST API 用に API Gateway で生成された Java SDK を使用する
このセクションでは、単純な電卓の API を例として使用し、REST API に対して API Gateway で生成された Java SDK を使用するステップを示します。先に進む前に、「API Gateway で REST API の SDK を生成する」のステップを完了する必要があります。
API Gateway で生成した Java SDK をインストールして使用するには
-
ダウンロード済みの API Gateway で生成された .zip ファイルのコンテンツを抽出します。
-
Apache Maven
(バージョン 3.5 以降が必要です) をダウンロードしてインストールします。 -
JDK 8
をダウンロードしてインストールします。 -
JAVA_HOME
環境変数を設定します。 -
解凍した SDK フォルダ内の pom.xml ファイルに移動します。このフォルダーは、デフォルトでは
generated-code
です。mvn install コマンドを実行し、コンパイルされたアーティファクトファイルをローカルの Maven リポジトリにインストールします。これにより、コンパイル済み SDK ライブラリを含むtarget
フォルダーが作成されます。 -
空のディレクトリで次のコマンドを入力し、インストールした SDK ライブラリを使用して API を呼び出すためのクライアントプロジェクトスタブを作成します。
mvn -B archetype:generate \ -DarchetypeGroupdId=org.apache.maven.archetypes \ -DgroupId=
examples.aws.apig.simpleCalc.sdk.app
\ -DartifactId=SimpleCalc-sdkClient
注記
上のコマンドで区切り記号の
\
は読みやすくするために使用しています。コマンド全体は区切り記号がない単一の行となります。このコマンドでは、アプリケーションスタブを作成します。アプリケーションスタブには、プロジェクトのルートディレクトリ (上のコマンドの
pom.xml
SimpleCalc-sdkClientsrc
) のファイルと
フォルダが含まれます。当初は、ソースファイルとしてsrc/main/java/
と{package-path}
/App.javasrc/test/java/
の 2 つがあります。この例では、{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>
タグを新しいバージョンに更新する必要があります。 -
次に、SDK の
getABOp(GetABOpRequest req)
、getApiRoot(GetApiRootRequest req)
、postApiRoot(PostApiRootRequest req)
の各メソッドを呼び出して、SDK で API を呼び出す方法を示します。これらのメソッドは、GET /{a}/{b}/{op}
、GET /?a={x}&b={y}&op={operator}
、POST /
の各メソッドに対応します。API リクエストのペイロードはそれぞれ{"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()); } }
上の例で、SDK クライアントをインスタンス化するために使用している設定はサンプルであり、必ずしも推奨されるベストプラクティスではありません。また、
sdkClient.shutdown()
の呼び出しはオプションです。リソースを解放するタイミングを正確に制御する場合などに役立ちます。
Java SDK を使用して API を呼び出すための基本的なパターンを示しました。必要に応じて手順を拡張し、他の API メソッドを呼び出すことができます。