持续的 Spotify 429 错误 - 荒谬的 retry-after 建议 76,000s(大约 21 小时)
Persistent Spotify 429 errors - with ridiculous retry-after suggestion of 76,000s (about 21hr)
我正在开发一个应用程序,它使用 Spotify Web API 根据给定的食谱为用户构建和维护播放列表(只是一个 JSON 代表 logic-scheme基本上)。 目前该应用程序处于开发模式。 我在每次 API 调用之间使用延迟,目前约为 400 毫秒。当我偶尔遇到 429 错误(请求太多)时,我也有 7.5 秒的延迟。
无论如何,我最近做到了,所有的播放列表食谱都在无限循环中重建。因此,该过程总是 运行ning 并大约每 100 毫秒进行一次 API 调用,以便根据食谱保留所有播放列表 up-to-date。然而,在让这个循环 运行 大约 10 分钟后,即使在 7.5 秒或更长时间后重试,我也开始持续获得 429s。
显然 429 响应包含一个名为 'retry-after' 的 header,这是 Spotify 建议等待多长时间才能再次调用(正如我所说,之前我只是在 429s 上使用固定的 7.5 秒延迟).我看到我收到的 'retry-after' 的值约为 76,000 秒(21 小时)。
但我认为速率限制是在 30 秒内强制执行的 window...
(见https://developer.spotify.com/documentation/web-api/guides/rate-limits/)那为什么我的'retry-after'header这么高?
这主要是一个设计哲学问题,所以我认为代码本身大部分是无关紧要的,但如果您想看一下,可以在这里找到:https://github.com/jakefoglia/Smart-Playlist-Manager
site/SPM-core/maintainer.js :包含 'infinite loop'
site/SPM-core/spotify_api_hook.js :包含大部分 API 调用
文档中的 30s window 仅作为示例,而不是 API 的实际工作方式。正如您所说的那样,Retry-After
header(值为秒)是您决定在进行下一次呼叫之前等待多长时间所需的所有信息。
每次您的应用程序通过提前请求“违反”速率限制时,它都会受到延迟时间增加的“惩罚”,而且由于该应用程序显然甚至从未咨询过 header,并反复违反了限制,延迟变得如此之高。然而,这并没有导致关闭、阻塞、拒绝或类似的结果,因为 header 仅 建议 延迟的持续时间,而不是强制执行它。
我正在开发一个应用程序,它使用 Spotify Web API 根据给定的食谱为用户构建和维护播放列表(只是一个 JSON 代表 logic-scheme基本上)。 目前该应用程序处于开发模式。 我在每次 API 调用之间使用延迟,目前约为 400 毫秒。当我偶尔遇到 429 错误(请求太多)时,我也有 7.5 秒的延迟。
无论如何,我最近做到了,所有的播放列表食谱都在无限循环中重建。因此,该过程总是 运行ning 并大约每 100 毫秒进行一次 API 调用,以便根据食谱保留所有播放列表 up-to-date。然而,在让这个循环 运行 大约 10 分钟后,即使在 7.5 秒或更长时间后重试,我也开始持续获得 429s。
显然 429 响应包含一个名为 'retry-after' 的 header,这是 Spotify 建议等待多长时间才能再次调用(正如我所说,之前我只是在 429s 上使用固定的 7.5 秒延迟).我看到我收到的 'retry-after' 的值约为 76,000 秒(21 小时)。
但我认为速率限制是在 30 秒内强制执行的 window... (见https://developer.spotify.com/documentation/web-api/guides/rate-limits/)那为什么我的'retry-after'header这么高?
这主要是一个设计哲学问题,所以我认为代码本身大部分是无关紧要的,但如果您想看一下,可以在这里找到:https://github.com/jakefoglia/Smart-Playlist-Manager
site/SPM-core/maintainer.js :包含 'infinite loop'
site/SPM-core/spotify_api_hook.js :包含大部分 API 调用
文档中的 30s window 仅作为示例,而不是 API 的实际工作方式。正如您所说的那样,Retry-After
header(值为秒)是您决定在进行下一次呼叫之前等待多长时间所需的所有信息。
每次您的应用程序通过提前请求“违反”速率限制时,它都会受到延迟时间增加的“惩罚”,而且由于该应用程序显然甚至从未咨询过 header,并反复违反了限制,延迟变得如此之高。然而,这并没有导致关闭、阻塞、拒绝或类似的结果,因为 header 仅 建议 延迟的持续时间,而不是强制执行它。