持续的 Spotify 429 错误 - 带有荒谬的重试建议 76,000 秒(约 21 小时)

Posted

技术标签:

【中文标题】持续的 Spotify 429 错误 - 带有荒谬的重试建议 76,000 秒(约 21 小时)【英文标题】:Persistent Spotify 429 errors - with ridiculous retry-after suggestion of 76,000s (about 21hr) 【发布时间】:2022-01-15 13:36:22 【问题描述】:

我正在开发一个应用程序,它使用 Spotify Web API 根据给定的配方(基本上只是一个代表逻辑方案的 JSON)为用户构建和维护播放列表。 当前应用程序处于开发模式。我在每次 API 调用之间使用延迟,目前约为 400 毫秒。当我偶尔遇到 429 错误(请求太多)时,我也有 7.5 秒的延迟。

无论如何,我最近做到了,所有的播放列表配方都在无限循环中重建。因此,该过程始终在运行并大约每 100 毫秒进行一次 API 调用,以便根据配方保持所有播放列表的最新状态。然而,在让这个循环运行大约 10 分钟后,即使在 7.5 秒或更长时间后重试,我也开始持续获得 429 秒。

显然 429 响应包含一个名为“retry-after”的标题,这是 Spotify 建议在拨打另一个电话之前等待多长时间(正如我所说,在我只是在 429 上使用固定的 7.5 秒延迟之前)。我看到我收到的 'retry-after' 价值约为 76,000 秒(21 小时)。

但我认为速率限制是在 30 秒的窗口内强制执行的... (请参阅https://developer.spotify.com/documentation/web-api/guides/rate-limits/)那么为什么我的“重试后”标头如此之高?

这主要是一个设计哲学问题,所以我认为代码本身大部分是无关紧要的,但如果你想看看它可以在这里找到:https://github.com/jakefoglia/Smart-Playlist-Manager

site/SPM-core/maintainer.js : 包含“无限循环”

site/SPM-core/spotify_api_hook.js :包含大部分 API 调用

【问题讨论】:

【参考方案1】:

文档中的 30s 窗口仅作为示例,而不是 API 的实际工作方式。正如您所说的那样,Retry-After 标头(值是秒)是您决定在进行下一次调用之前等待多长时间所需的所有信息。

每次您的应用通过提早请求“违反”速率限制时,它都会因延迟期延长而受到“惩罚”,而且由于该应用显然从未咨询过标头,并且一再违反限制,因此延迟得到这么高。然而,这并没有导致关闭、阻塞、拒绝或类似情况,因为标头仅建议延迟的持续时间,而不是强制执行。

【讨论】:

好的,我明白你在说什么。我会让它遵守他们的拖延。这对于一个高级项目和网络编程来说对我来说有点新鲜。谢谢你的解释!

以上是关于持续的 Spotify 429 错误 - 带有荒谬的重试建议 76,000 秒(约 21 小时)的主要内容,如果未能解决你的问题,请参考以下文章

如何限制/速率限制请求以防止 Axios 出现 429 错误

Spotify 给出当前曲目的错误值(AppleScript)

持续实时获取当前在 Spotify 上播放的歌曲

Spotify API 授权代码流向我返回 400 错误请求

带有播放按钮和/或元数据 API (Spotify) 的现场演示

带有 PHP 的 Spotify 的 RSS 提要