Skip to content

Commit 1988500

Browse files
committed
Add request rate limit to Contentful calls
1 parent f1561aa commit 1988500

File tree

1 file changed

+7
-3
lines changed

1 file changed

+7
-3
lines changed

src/server/services/contentful.js

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -69,8 +69,8 @@ function mapAssetFileUrlToCdn(asset) {
6969
* Creates a promise that resolves two second after its creation.
7070
* @return {Promise}
7171
*/
72-
function threeSecondDelay() {
73-
return new Promise(resolve => setTimeout(resolve, 3000));
72+
function oneSecondDelay() {
73+
return new Promise(resolve => setTimeout(resolve, 1000));
7474
}
7575

7676
/**
@@ -94,6 +94,10 @@ class ApiService {
9494
* @return {Promise}
9595
*/
9696
async fetch(endpoint, query) {
97+
// Contentful API rate limits, which are 78 requests within 1 second
98+
// we await 14ms before each request to make sure we don't break this limitation
99+
await new Promise(resolve => setTimeout(resolve, 14));
100+
// fire calls to Contentful API
97101
let url = `${this.private.baseUrl}${endpoint}`;
98102
if (query) url += `?${qs.stringify(query)}`;
99103
let res;
@@ -108,7 +112,7 @@ class ApiService {
108112
});
109113
/* 429 = "Too Many Requests" */
110114
if (res.status !== 429) break;
111-
await threeSecondDelay();
115+
await oneSecondDelay();
112116
/* eslint-enable no-await-in-loop */
113117
}
114118
if (!res.ok) throw new Error(res.statusText);

0 commit comments

Comments
 (0)