

# REST API 用に API Gateway で生成された Android SDK を使用する
<a name="how-to-generate-sdk-android"></a>

このセクションでは、REST API 用に API Gateway で生成された Android SDK を使用するステップを説明します。先に進む前に、「[API Gateway で REST API の SDK を生成する](how-to-generate-sdk.md)」のステップを済ませている必要があります。

**注記**  
 生成された SDK は、Android 4.4 以前とは互換性がありません。詳細については、「[Amazon API Gateway に関する重要な注意点](api-gateway-known-issues.md)」を参照してください。

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

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

1. [Apache Maven](https://maven.apache.org/) をダウンロードしてインストールします (バージョン 3.x を推奨)。

1. [JDK 8](https://docs.oracle.com/javase/8/docs/technotes/guides/install/install_overview.html) をダウンロードしてインストールします。

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

1. **mvn install** コマンドを実行し、コンパイルされたアーティファクトファイルをローカルの Maven リポジトリにインストールします。これにより、コンパイル済み SDK ライブラリを含む `target` フォルダーが作成されます。

1. `target` フォルダからの SDK ファイル (ファイルの名前は、 `simple-calcsdk-1.0.0.jar`など、SDK の生成時に指定した **Artifact ID** および **Artifact バージョン**に由来するものです) を、`target/lib` フォルダからのその他すべてのライブラリとともに、プロジェクトの `lib` フォルダにコピーします。

   Andriod Studio を使用している場合は、クライアントアプリケーションモジュールで `libs` フォルダを作成し、このフォルダ内に必要な .jar ファイルをコピーします。モジュールの gradle ファイルの依存関係セクションに、以下が含まれていることを確認します。

   ```
       compile fileTree(include: ['*.jar'], dir: 'libs')
       compile fileTree(include: ['*.jar'], dir: 'app/libs')
   ```

   重複した .jar ファイルが宣言されていないことを確認します。

1. `ApiClientFactory` クラスを使用して、API Gateway で生成された SDK を初期化します。例:

   ```
   ApiClientFactory factory = new ApiClientFactory();
   
   // Create an instance of your SDK. Here, 'SimpleCalcClient.java' is the compiled java class for the SDK generated by API Gateway. 
   final SimpleCalcClient client = factory.build(SimpleCalcClient.class);
   
   // Invoke a method: 
   //   For the 'GET /?a=1&b=2&op=+' method exposed by the API, you can invoke it by calling the following SDK method:
   
   Result output = client.rootGet("1", "2", "+");
   
   //     where the Result class of the SDK corresponds to the Result model of the API.
   //
   
   //   For the 'GET /{a}/{b}/{op}'  method exposed by the API, you can call the following SDK method to invoke the request,
   
   Result output = client.aBOpGet(a, b, c);
   
   //     where a, b, c can be "1", "2", "add", respectively.
   
   //   For the following API method:
   //        POST /
   //        host: ...
   //        Content-Type: application/json
   //    
   //        { "a": 1, "b": 2, "op": "+" }
   // you can call invoke it by calling the rootPost method of the SDK as follows:
   Input body = new Input();
   input.a=1;
   input.b=2;
   input.op="+";
   Result output = client.rootPost(body);
   
   //      where the Input class of the SDK corresponds to the Input model of the API.
   
   // Parse the result:
   //     If the 'Result' object is { "a": 1, "b": 2, "op": "add", "c":3"}, you retrieve the result 'c') as 
   
   String result=output.c;
   ```

1. Amazon Cognito 認証情報プロバイダーを使用して API への呼び出しを認可するには、次の例で示すように API Gateway で生成された SDK を使用して `ApiClientFactory` クラスで AWS 認証情報のセットを渡します。

   ```
   // Use CognitoCachingCredentialsProvider to provide AWS credentials
   // for the ApiClientFactory
   AWSCredentialsProvider credentialsProvider = new CognitoCachingCredentialsProvider(
           context,          // activity context
           "identityPoolId", // Cognito identity pool id
           Regions.US_EAST_1 // region of Cognito identity pool
   );
   
   ApiClientFactory factory = new ApiClientFactory()
     .credentialsProvider(credentialsProvider);
   ```

1. API Gateway で生成された SDK で API キーを設定するには、次のようなコードを使用します。

   ```
   ApiClientFactory factory = new ApiClientFactory()
     .apiKey("YOUR_API_KEY");
   ```