12. API Gateway

ここでは API Gateway の実行方法について説明します。

12.1. API Gatewayの実行

NbApigw を使用して、任意の HTTP リクエストを API Gateway 宛てに送信することができます。

リクエストは NbApigw#Builder を使用して生成することができます。 以下の例では、API 名が "apiname" 、サブパスが "subpath" で JSON の応答を返す API に対し PUT リクエストを送信します。 結果をパースし、NbJSONObject として取得しています。

リクエストボディ用のデータは NbJSONObject、 String、又は InputStream が使用可能です。使用時は ContentType を適切に設定してください。

NbApigw apigw = NbApigw.builder("apiname")
    .put()
    .subpath("subpath")
    .body(NbJsonObject.Parse("{'foo': 'bar'}"))
    .contentType("application/json")
    .build();

apigw.executeJSON(new NbCallback2<NbJSONObject, Response>() {
    @Override
    public void onSuccess(NbJSONObject json, Response response) {
        // get result from "json"
    }
    @Override
    public void onFailure(int statusCode, NbErrorInfo errorInfo) {
        // fail
    }
});

バイナリの場合も同様に送信することができます。 Body 設定時の引数に、送信データの InputStream、 contentLength、 contentType を指定してください。

NbApigw apigw = NbApigw.builder("apiname")
    .put()
    .subpath("subpath")
    .body(inputStream, 128, "application/octet-stream")
    .build();

apigw.executeJSON(new NbCallback2<NbJSONObject, Response>() {
    @Override
    public void onSuccess(NbJSONObject json, Response response) {
        // get result from "json"
    }
    ...
});

12.2. ヘッダとクエリパラメータ

リクエストヘッダ、クエリパラメータを付与する場合、NbApigw の Builder に、追加で header()、param() を使用して下さい。

NbApigw apigw = NbApigw.builder("apiname")
    .get()
    .subpath("subpath")
    .param("sampleparam", "param1")
    .header("AddHeader", "HeaderValue1")
    .header("User-Agent", "Sample-User-Agent")
    .build();

レスポンスヘッダを参照する場合、コールバックの引数 response から取得することができます。

apigw.executeJSON(new NbCallback2<NbJSONObject, Response>() {
    @Override
    public void onSuccess(NbJSONObject json, Response response) {
        String sampleHeader = response.header("TestResponseHeader");
    }

    ...
});

12.3. バイナリデータの取得

API のレスポンスがバイナリなど JSON 以外の場合、executeJSON() の代わりに、executeStream() を使用します。 レスポンスの内容に応じて、InputStream からデータを取得してください。

apigw.executeStream(new NbCallback2<InputStream, Response>() {
    @Override
    public void onSuccess(InputStream inputStream, Response response) {
        BufferedReader br = new BufferedReader(new InputStreamReader(inputStream));
        StringBuilder sb = new StringBuilder();
        String line;

        try {
            while ((line = br.readLine()) != null) {
                sb.append(line);
            }
            br.close();
        } catch (Exception ex) {
            // fail
        }
    }
    ...
});