LoginSignup
1
6

More than 5 years have passed since last update.

API GatewayをAndroidから利用する

Last updated at Posted at 2017-04-21

Amazon API Gatewayのステージングまでは出来ている前提です。

SDKの生成とbuild

マネージメントコンソールのAPI Gatewayから、クライアントOS別にSDKの生成が出来ます。

ここでAndroid SDKを選択して「SDKの生成」ボタンを押すとソースコードとbuild用の設定ファイルが生成され、zip形式でダウンロードできます。
sdk.png

zipを展開して含まれているREADME.mdに大体の事は書いてあります。

  • mavenを入れてください
  • Java(JDK)を入れてください
  • mvn installでjarを作ってください
  • 出来上がったJarをプロジェクトフォルダ(クラスパスが通っているところ)にコピーしてください

上記に従い、出来上がったjarをAndroidの開発環境に入れます。

Android Studio 2.3だとプロジェクトフォルダーの./app/libs配下です。
exp.png
又、SDKのbuild.gradleに記載されているにdependenciesをandroid Studioで作成したプロジェクトのbuild.gradleに追加しておいて下さい。

dependencies {
    compile "com.amazonaws:aws-android-sdk-apigateway-core:2.3.1+"
}

SDKを利用してAPI Gatewayを呼び出す

buildが出来るようになったので、コードを書きます。

「SDKの生成」で生成されたXxxxxClient.java(XxxxxはAPI Gatewayのメソッド名)というinterfaceを利用します。
README.mdに使い方(というほどの内容でもない)が記載されています。

ApiClientFactory factory = new ApiClientFactory();
// create a client
final XxxxxClient client = factory.build(XxxxxClient.class);

これだけだと使い方がわかりませんがXxxxxClient.javaの中を見ると何となくわかります。

@com.amazonaws.mobileconnectors.apigateway.annotation.Service(endpoint = "https://XXXXXXXXX.execute-api.us-west-1.amazonaws.com/prod")
public interface XxxxxClient {

    /**
     * A generic invoker to invoke any API Gateway endpoint.
     * @param request
     * @return ApiResponse
     */
    com.amazonaws.mobileconnectors.apigateway.ApiResponse execute(com.amazonaws.mobileconnectors.apigateway.ApiRequest request);
}

ApiRequest を引数に渡してexecuteを実行するとApiResponse が戻ります。
なので、このように書きました

XxxxxClient client = new ApiClientFactory().build(XxxxxClient.class);

ApiRequest request = new ApiRequest();
request.withHttpMethod(HttpMethodName.POST);
request.withPath(※methodName);

// bodyをJSON形式で作成
Map<String, String> m = new HashMap<String, String>();
m.put("arg", "123");
String json = (new Gson()).toJson(m);

request.withBody(json);
request.addHeader("Content-Length", Integer.toString(json.getBytes().length));

ApiResponse response = client.execute(request);

最初気付かなかったのですが、SDKのendpointにはステージのcontextまで(~/prod/)しか書かれていないので、メソッドはwithPathで設定します。※methodNameのところです。

これで動きました。
APIの認証については2種類+認証なしがありますが、今回は認証なしで動作確認しています。

※その他、Android側のお作法としてHTTP通信はmain threadで実行しない、マニフェストにインタネットアクセスの許可を設定する事に留意してください。

1
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
6