The SDK can be configured to use client-side rate limits. This can help implementations stay within the API rate limits in dev and demo marketplace environments that the Integration API enforces. It is recommended to use client-side rate limits for production, as well.
The SDK accepts two rate limiters as configuration: the queryLimiter
applies
to all API queries (i.e. reading data from the API) and the commandLimiter
applies to all API commands (i.e. write operations that create, update data,
etc).
Example:
const sharetribeIntegrationSdk = require('sharetribe-flex-integration-sdk');
const queryLimiter = sharetribeIntegrationSdk.util.createRateLimiter(
sharetribeIntegrationSdk.util.devQueryLimiterConfig
);
const commandLimiter = sharetribeIntegrationSdk.util.createRateLimiter(
sharetribeIntegrationSdk.util.devCommandLimiterConfig
);
const integrationSdk = sharetribeIntegrationSdk.createInstance({
clientId: "<your Client ID>",
clientSecret: "<your Client secret>",
queryLimiter: queryLimiter,
commandLimiter: commandLimiter,
});
Example using recommended rate limits:
const sharetribeIntegrationSdk = require('sharetribe-flex-integration-sdk');
const queryLimiter = sharetribeIntegrationSdk.util.createRateLimiter(
sharetribeIntegrationSdk.util.prodQueryLimiterConfig
);
const commandLimiter = sharetribeIntegrationSdk.util.createRateLimiter(
sharetribeIntegrationSdk.util.prodCommandLimiterConfig
);
const integrationSdk = sharetribeIntegrationSdk.createInstance({
clientId: "<your Client ID>",
clientSecret: "<your Client secret>",
queryLimiter: queryLimiter,
commandLimiter: commandLimiter,
});
The createRateLimiter()
constructor takes a config object with:
bucketInitial
: initial token bucket sizebucketIncreaseAmount
: number of tokens added to the bucket every
bucketIncreaseInterval
millisecondsbucketIncreaseInterval
: every this many milliseconds a
bucketIncreaseAmount
number of tokens are added to the bucketbucketMaximum
: maximum size of the bucketExample:
const sharetribeIntegrationSdk = require('sharetribe-flex-integration-sdk');
// 100 initial requests and then 2 requests per 500ms (i.e. 4 requests per second)
const queryLimiter = sharetribeIntegrationSdk.util.createRateLimiter({
bucketInitial: 100,
bucketIncreaseAmount: 2,
bucketIncreaseInterval: 500,
bucketMaximum: 100,
});
// 100 initial requests and then 1 request per second
const commandLimiter = sharetribeIntegrationSdk.util.createRateLimiter({
bucketInitial: 100,
bucketIncreaseAmount: 1,
bucketIncreaseInterval: 1000,
bucketMaximum: 100,
});
const integrationSdk = sharetribeIntegrationSdk.createInstance({
clientId: "<your Client ID>",
clientSecret: "<your Client secret>",
queryLimiter: queryLimiter,
commandLimiter: commandLimiter,
});