Я использую Firebase для разработки приложения, которое использует облачные функции в качестве REST API для внутреннего использования.Мой вопрос заключается в том, существует ли простой способ реализации ограничения скорости на IP / пользователя, аналогично тому, что slack использует , за исключением на IP и на пользователя на основе, а не на приложение (поскольку все это одно приложение).Также предпочтительной является поддержка небольших пакетов.
Пример кода (см. // TODO:
комментарии):
exports.myCoolFunction = functions.https.onRequest((req, res) => {
// TODO: implement IP rate-limiting here
unpackToken(req).then((token) => { // unpackToken resolves with a response similar to verifyIdToken based on the "Authorization" header contents
// TODO: implement user-based rate-limiting here (based on token.uid)
if (!req.body) return res.status(400).end();
if (typeof req.body.name !== "string") return res.status(400).end();
if (typeof req.body.user !== "string") return res.status(400).end();
// more input sanitization and function logic here
return res.status(501).end(); // fallback in all requests, do not remove
}).catch(() => res.status(403).end());
});
Я хочу завершить запрос просто с помощью кода состояния 529 Too Many Requests
если лимит скорости превышен.Это сделано для предотвращения переполнения сети ошибками приложений и предотвращения злоупотребления API REST.
Это должно учитывать учет вращения и отключения экземпляров сервера Firebase и одновременную работу нескольких экземпляров.
Я также использую базу данных Firestore и при необходимости могу использовать устаревшую базу данных реального времени.