Amazon API Gatewayを利用しAndroidアプリから簡単にWeb上のAPIを叩く方法

下記記事で利用しているAmazon API Gatewayの利用詳細となります。

関連記事

目的

自前実装に比べて、セキュリティを担保しつつメンテナンスコストを低くしたい

概要図

API_GatewayArticle

Amazon API Gatewayを利用すると他所のAPIを一括管理するだけでなく、自社のAPIをよりセキュアに利用/アクセス回数のスロットリング/キャッシュを行う事も出来、CloudWatchでアクセス状況も見れるとの事なので、自社のレガシAPIのエンハンス用途にも良いとの事でした(公式マニュアル)

Amazon API Gatewayに新しくAPIを作成しResourcesを定義

本来会社名部分をパラメータ化すべきですが、、、テストという事で

API_Gateway10

Jsonレスポンスのスキーマを作成

API_Gateway11

APIのデプロイ及びAndroid用SDKをGenerateする

API_Gateway12

ダウンロードしたファイルを解凍するとpom.xmlファイルがあるのでMavenでビルド

mavenが入っていない場合、Macでhomebrewが入っていれば brew install maven

MacBook:Mycompany-Client-0.0.2 takashi$ pwd
/Users/takashi/Downloads/Mycompany-Client-0.0.2
$ ls
LICENSE.txt README.md   pom.xml     target
NOTICE.txt  build.gradle    src
$ mvn install
...
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
...

ビルドされたファイルをAndroidStudioのlib下にコピー

AndroidStudioでプロジェクトを新規作成、Project表示としてlibs下にコピー
及び build.gradle の dependencies を確認

ビルドで生成されたファイル郡

API_Gateway13

Android Studioで開いているプロジェクトのLibs下にコピー

API_Gateway05

Manifestのパーミッションを確認

下記が入っている事を確認

<uses-permission android:name="android.permission.INTERNET"/>

MainActivityにコードを書く

スキーマとして定義した物が名前引き可能です。
実行するとgithub apiからgetFollowersの値を取得してくれます。

API_GatewaySample

ソースコード

import するパッケージ名やAPI名、メソッド名はご自身の設定に合わせて下さい。

package net.skyarch.myapplication;

import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;

import com.amazonaws.mobileconnectors.apigateway.ApiClientFactory;
import net.skyarch.api.SkyarchAPIClient;

public class MainActivity extends AppCompatActivity {
    protected final String TAG = "API Gateway SDK Test";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        new AsyncTask<Void, Void, Void>() {
            @Override
            protected Void doInBackground(Void... params) {

                //Githubから follower数を取得
                ApiClientFactory factory = new ApiClientFactory();
                final SkyarchAPIClient client = factory.build(SkyarchAPIClient.class);
                int followerCount = client.githubGet().getFollowers();
                Log.d(TAG, "git followers" + Integer.toString(followerCount));

                client.githubGet().

                return null;
            }
        }.execute();
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }
}

参考記事

Amazon API Gatewayの利用方法
http://dev.classmethod.jp/cloud/aws/api-gateway-with-android/

投稿者プロフィール

takashi
Japan AWS Ambassadors 2023, 2024
開発会社での ASP型WEBサービス企画 / 開発 / サーバ運用 を経て
2010年よりスカイアーチネットワークスに在籍しております

機械化/効率化/システム構築を軸に人に喜んで頂ける物作りが大好きです。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


Time limit is exhausted. Please reload CAPTCHA.

ABOUTこの記事をかいた人

Japan AWS Ambassadors 2023, 2024 開発会社での ASP型WEBサービス企画 / 開発 / サーバ運用 を経て 2010年よりスカイアーチネットワークスに在籍しております 機械化/効率化/システム構築を軸に人に喜んで頂ける物作りが大好きです。