REST API 用に API Gateway で生成された Java SDK を使用する - Amazon API Gateway

REST API 用に API Gateway で生成された Java SDK を使用する

このセクションでは、単純な電卓の API を例として使用し、REST API に対して API Gateway で生成された Java SDK を使用するステップを示します。先に進む前に、「API Gateway コンソールを使用して API の SDK を生成する」のステップを完了する必要があります。

API Gateway で生成した Java SDK をインストールして使用するには

  1. ダウンロード済みの API Gateway で生成された .zip ファイルのコンテンツを抽出します。

  2. Apache Maven (バージョン 3.5 以降が必要です) をダウンロードしてインストールします。

  3. JDK 8 をダウンロードしてインストールします。

  4. JAVA_HOME 環境変数を設定します。

  5. 解凍した SDK フォルダ内の pom.xml ファイルに移動します。このフォルダーは、デフォルトでは generated-code です。mvn install コマンドを実行し、コンパイルされたアーティファクトファイルをローカルの Maven リポジトリにインストールします。これにより、コンパイル済み SDK ライブラリを含む target フォルダーが作成されます。

  6. 空のディレクトリで次のコマンドを入力し、インストールした SDK ライブラリを使用して API を呼び出すためのクライアントプロジェクトスタブを作成します。

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

    上のコマンドで区切り記号の \ は読みやすくするために使用しています。コマンド全体は区切り記号がない単一の行となります。

    このコマンドでは、アプリケーションスタブを作成します。アプリケーションスタブには、プロジェクトのルートディレクトリ (上のコマンドの pom.xmlSimpleCalc-sdkClientsrc) の ファイルと フォルダが含まれます。当初は、ソースファイルとして src/main/java/{package-path}/App.javasrc/test/java/{package-path}/AppTest.java の 2 つがあります。この例では、{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. 次に、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 メソッドを呼び出すことができます。