您如何限制 API 跨文件的请求? [节点]

How do you rate-limit API requests across files? [nodejs]

我正在尝试使用 bottleneck module 但这个问题适用于任何速率限制模块。

您可以像这样创建一个限制器

const limiter = new Bottleneck({
  minTime: 333
});

但是如果我需要在多个文件中使用相同的限制器怎么办?我会再次创建限制器还是传递它?

示例文件:

// Call to limit

module.exports = axios.get('some-endpoint').then(res => return res)

这取决于您的用例。

假设您正在使用 limiter 来限制您对某些第三方 API 的请求,并且您希望确保每秒只发出 3 个请求,并且您从多个请求中发出请求模块。在这种情况下,是的,您需要传递该限制器并在多个模块中使用它。

在这种情况下更好的设计是确保 只有一个模块 调用 API,并且那个模块有限制器。例如:

// api.js
const limiter = new Bottleneck({
    minTime: 333
});

module.exports = {
    makeRequest: limiter.wrap(options => {
        // interact with API and return response
    });
};

然后,您的每个其他模块都只使用您的内部 API:

// some-other-module.js
const api = require('./api');

module.exports = {
    createCustomer: (options) => {
        return api.makeRequest({ ... });
    }
};

这样,限制器只存在于您应用程序的一个位置,但会被所有与之交互的模块使用 API。

(如果您与多个供应商互动,那么当然,每个供应商使用不同设置的不同限制器是有意义的。)