Node.js での割り当てサービスへのアクセス

はじめに

このトピックでは、apigee-access を使用して、Node.js アプリケーションから Apigee Edge 割り当てサービスにアクセスする方法について説明します。apigee-access を使用すると、割り当て値の適用リセットを行えます。

var apigee = require('apigee-access');
var quota = apigee.getQuota();
quota.apply({ identifier: 'Foo', allow: 10, timeUnit: 'hour' },
    function(err, result) {
         console.log('Quota applied: %j', result);
    });

メソッド


apply

Quota オブジェクトの設定を変更します。このメソッドは、割り当ての増減や時間間隔の変更などの構成に使用します。

使用方法

var apigee = require('apigee-access');
var quota = apigee.getQuota();
quota.apply({parameters}, callback);

var apigee = require('apigee-access');
var quota = apigee.getQuota();

        // Apply a quota of 100 requests per hour
        quota.apply({
         identifier: 'Foo',
         timeUnit: 'hour',
         allow: 100
        }, quotaResult);

                function quotaResult(err, r) {
                 if (err) { console.error('Quota failed'); }
                }

パラメータ

apply() メソッドは、オブジェクトと関数という 2 つのパラメータを使用します。

(1)最初のパラメータは、次のフィールドを持つ JSON オブジェクトです。

  • identifier(文字列、必須): 割り当てバケットの一意識別子。たとえば、アプリケーション ID、IP アドレス、またはユーザー名です。
  • timeUnit(文字列、必須): 割り当てバケットへの蓄積がリセットされるまでの時間。有効な値は "minute"、"hour"、"day"、"week"、"month" です。
  • allow(数値、必須): 割り当てバケットの最大値。この値と現在値によって、割り当てを超過したかどうかを返します。
  • interval(数値、省略可): "timeUnit" と組み合わせて、割り当てがリセットされるまでの時間が決まります。デフォルトは 1 です。2 時間、3 週間などの割り当てを可能にするには、より大きな値を設定します。
  • weight(数値、省略可): 割り当ての増分刻み値。デフォルトは 1 です。

(2)2 番目のパラメータは、次の 2 つの引数を使用するコールバック関数です。

  • 最初の引数は、Error オブジェクト(割り当てを増やせなかった場合)または未定義(操作が正常に終了した場合)になります。
  • 2 番目の数は、以下のフィールドを含むオブジェクトです。
    • used(数値): 割り当てバケットの現在の値。
    • allowed(数値): 割り当てバケットの最大値。上回ると割り当ての超過とみなされます。リクエスト オブジェクトでは、同じ値が "allow" として渡されます。
    • isAllowed(ブール値): 割り当てに空きがあるかどうか -- used が allowed 以下であれば true。
    • expiryTime(long): 割り当てバケットがリセットされるときのタイムスタンプ(1970 年からのミリ秒単位の経過時間)。
    • timestamp(long): 割り当てが更新された日時のタイムスタンプ。

var apigee = require('apigee-access');
var quota = apigee.getQuota();

// Apply a quota of 100 requests per hour
quota.apply({
  identifier: 'Foo',
  timeUnit: 'hour',
  allow: 100
}, quotaResult);

// Apply a quota of 500 requests per five minutes
quota.apply({
  identifier: 'Bar',
  timeUnit: 'minute',
  interval: 5,
  allow: 500
}, quotaResult);

// Increment the quota by a value of 10
quota.apply({
  identifier: 'Foo',
  timeUnit: 'hour',
  allow: 100,
  weight: 10
}, quotaResult);

function quotaResult(err, r) {
  if (err) { console.error('Quota failed'); }
}

reset

割り当てをゼロにリセットするには、quota.reset() を呼び出します。このメソッドは以下の 2 つのパラメータを取ります。
  • 以下のフィールドを持つ JSON オブジェクト。
    • identifier(文字列、必須): 割り当てバケットの一意の識別子。たとえば、アプリケーション ID、IP アドレス、またはユーザー名です。
    • timeUnit(文字列、必須): 割り当てバケットへの蓄積がリセットされるまでの時間。有効な値は "minute"、"hour"、"day"、"week"、"month" です。
    • interval(数値、省略可): "timeUnit" と組み合わせて、割り当てがリセットされるまでの時間が決まります。デフォルトは 1 です。時間をリセットするには、2 時間、3 週間などの大きな値を設定します。
  • コールバック関数:
    • リセットに失敗すると、コールバック関数は最初のパラメータとして Error オブジェクトを使用します。

高度な割り当て使用例

割り当てを作成するときに、任意の "options" オブジェクトを追加できます。このオブジェクトは、省略可能なパラメータを 1 つ使用します。
  • syncInterval(数値、省略可): 分散割り当て実装が状態をネットワーク全体で同期する間隔(秒単位)。デフォルトは 10 です。
このパラメータは、分散割り当てのパフォーマンスをネットワーク全体で最適化するために使用します。設定値を小さくすると、パフォーマンスが低下し、apply オペレーションのレイテンシが大幅に長くなります。デフォルトの 10 秒は、多くの用途で適切な設定です。この間隔は最小でゼロにできます。その場合、"apply" が呼び出されるたびに状態が同期されます。この場合、パフォーマンスがかなり悪化します。