Help us understand the problem. What is going on with this article?

Node.js から API Gateway を簡単に使えるパッケージ作りました

More than 3 years have passed since last update.

はじめに

AWS API Gateway は便利なサービスですが、Node.js から使おうとすると、自動で生成される JavaScript のSDKがブラウザ用しか用意されていなかったり、エンドポイントごとにメソッドが自動で生成されていて、APIのエンドポイントを変更するごとにSDKを生成し直さなければならなかったりと不便だったため、Node.js から API Gateway を簡単に使えるパッケージを作りました。

aws-api-gateway-client
https://github.com/kndt84/aws-api-gateway-client

参考:
API Gateway で生成した JavaScript SDK を使用する
IAM認証(AWS SignatureV4)でAPIGatewayをNode.jsから呼び出す

事前準備

APIを利用するためには、Cross-Origin Resource Sharing (CORS) を有効にする必要がありますので、下記のページを参考にCORSを有効にします。

API Gateway リソースの CORS を有効にする

インストール

npm コマンドでインストール可能です。

npm install aws-api-gateway-client

SDKの利用

モジュールのリクエスト

var apigClientFactory = require('aws-api-gateway-client')

クライアントの作成

config に invokeUrl を設定して、クライアントオブジェクトを生成します。ただし、config にはIAMもしくはAPIキーを追加で設定する必要があり、これらは下記で説明します。

config = {invokeUrl:'https://xxxxx.execute-api.us-east-1.amazonaws.com'}
var apigClient = apigClientFactory.newClient(config);

 IAM認証

AWSの認証情報を利用してアクセスする場合は、クライアントオブジェクトを生成する時点で、invokeUrl に加えて、アクセスキー、シークレットキー、セッションキーを下記の通り設定します。

var apigClient = apigClientFactory.newClient({
    accessKey: 'ACCESS_KEY',
    secretKey: 'SECRET_KEY',
    sessionToken: 'SESSION_TOKEN', //OPTIONAL: If you are using temporary credentials you must include the session token
    region: 'eu-west-1' // OPTIONAL: The region where the API is deployed, by default this parameter is set to us-east-1
});

 APIキー認証

APIキーを使う場合は、invokeUrl に加えて、下記の通りキーを設定します。

var apigClient = apigClientFactory.newClient({
    apiKey: 'API_KEY'
});

パラメータの設定

var params = {
    //This is where any header, path, or querystring request params go. The key is the parameter named as defined in the API
    userId: '1234',
};
// Template syntax follows url-template https://www.npmjs.com/package/url-template
var pathTemplate = '/users/{userID}/profile'
var method = 'GET';
var additionalParams = {
    //If there are any unmodeled query parameters or headers that need to be sent with the request you can add them here
    headers: {
        param0: '',
        param1: ''
    },
    queryParams: {
        param0: '',
        param1: ''
    }
};
var body = {
    //This is where you define the body of the request
};

APIのコール

上記で設定したパラメータを下記のように引数にとってAPI をコールします。API はプロミスオブジェクトを返し、成功または失敗のコールバック関数を呼びます。

apigClient.invokeApi(params, pathTemplate, method, additionalParams, body)
    .then(function(result){
        //This is where you would put a success callback
    }).catch( function(result){
        //This is where you would put an error callback
    });
kndt84
センサーデータいじりしてます。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした