为什么应该从静态 API 令牌迁移到 OAuth 2.0
当您达到每月 API 速率限制时会发生什么?
您是否曾经遇到过每月API速率限制的问题?如果没有,那您真的很幸运。这是使用API服务时最常见的问题之一。一开始,您的应用程序用户都很愉快地使用API,一切都运行顺利,直到您的应用程序变得越来越受欢迎。然后,突然之间,您开始受到限制。现在,您需要在问题恶化之前搞清楚发生了什么,以及如何有效解决这个问题。
如果你在开发一款能够生成用户数据或触发操作的应用程序,那你需要了解你所使用的API的限制。这些限制可能会导致你的应用无法正常工作,甚至会造成应用崩溃。
本文旨在让您了解 API 速率限制,并就如何处理这些限制提供一般性建议。
以下是我们将重点讨论的几个要点:
- API 限制是什么?
- 它们是如何设置的?
- 什么是 API 请求
- 如果 API 调用用完,您的应用程序会发生什么情况?
- 克服 API 速率限制问题的 3 个简单步骤
API 限制是什么?
首先,我们要明确 “API 限制 “的含义。
API 提供商是提供应用程序接口 (API) 访问权限的组织。API 是一套用于构建软件应用程序的例程、协议和工具。
您的应用程序会向 API 提供商的服务器提交请求,询问有关如何与属于同一生态系统的其他服务进行交互的信息或说明。
为确保服务正常运行,提供商会对每分钟或每小时可发出的请求数量进行限制。这样,他们就可以管理负载,为每个请求提供最佳服务。
API 速率限制是指应用程序在指定时间内可进行的 API 调用或请求次数。除了并发 API 调用外,积极的轮询和快速的配置更新也会导致应用程序受到速率限制。
什么是 API 请求?
API 请求是您从 API 请求数据时遵循的方法。您可以使用请求来发送您希望 API 处理的信息。
例如,您可以使用 API 请求从服务器或应用程序请求您的个人资料或用户信息。您还可以使用它来发送您希望 API 处理的数据。
API 请求有两种类型:GET 和 POST。
- GET 请求– 此类请求从服务器检索数据。当您在浏览器中输入网站 URL 并按 Enter 键时,您正在执行 GET 请求。
- POST 请求– 这种类型的请求将数据发送到服务器或应用程序。当您在网站上提交表单时,表单中的信息将作为 POST 请求的一部分发送。
另请阅读:HTTP POST 与 GET:在 REST API 中使用是否更安全?
API 可以接收或发送信息。当 API 从服务器或应用程序请求数据时,它会收到响应。 API 端点是 API 连接到 Web 服务的点。它允许 API 访问由 HTTP 查询字符串表示的服务器上的数据。当您将 API 端点添加到 URL 并调用服务器时,会发生该请求。
这是Ipstack API的简单 API 请求示例。
https://api.ipstack.com/134.201.250.155
? access_key = YOUR_ACCESS_KEY
API响应:
{
"ip": "134.201.250.155",
"type": "ipv4",
"continent_code": "NA",
"continent_name": "North America",
"country_code": "US",
"country_name": "United States",
"region_code": "CA",
"region_name": "California",
"city": "Los Angeles",
"zip": "90013",
"latitude": 34.0453,
"longitude": -118.2413,
"location": {
"geoname_id": 5368361,
"capital": "Washington D.C.",
"languages": [
{
"code": "en",
"name": "English",
"native": "English"
}
],
"country_flag": "https://assets.ipstack.com/images/assets/flags_svg/us.svg",
"country_flag_emoji": "🇺🇸",
"country_flag_emoji_unicode": "U+1F1FA U+1F1F8",
"calling_code": "1",
"is_eu": false
},
"time_zone": {
"id": "America/Los_Angeles",
"current_time": "2018-03-29T07:35:08-07:00",
"gmt_offset": -25200,
"code": "PDT",
"is_daylight_saving": true
},
"currency": {
"code": "USD",
"name": "US Dollar",
"plural": "US dollars",
"symbol": "$",
"symbol_native": "$"
},
"connection": {
"asn": 25876,
"isp": "Los Angeles Department of Water & Power"
}
}
对于每个请求,您都会收到带有 HTTP 状态的响应。这将告诉您该操作是否成功。发出的不成功请求,无论是超出速率限制还是短时间内发出过多请求,都会收到带有状态代码的响应。
错误示例:如果 Ipstack API 中的每月 API 请求量已超出,则会返回以下错误。
{
"success": false,
"error": {
"code": 104,
"type": "monthly_limit_reached",
"info": "Your monthly API request volume has been reached. Please upgrade your plan."
}
}
如何接受或拒绝 API 请求?
所有 API 端点都经过身份验证。身份验证确定最终用户是谁并计算用户发出的请求数量。
授权令牌或密钥是身份验证机制中最终用户的识别凭证。使用电子邮件进行基本身份验证还可以确定最终用户是谁。
应用程序权限使用识别凭据来确定是否应接受或拒绝请求。
身份验证令牌或密钥将最终用户标识为应用程序的所有者。即JSON Web 令牌 (JWT)或不透明字符串令牌。生成的每个 API 令牌都是单独计算的,即使应用程序的最终用户多次生成也是如此。如果 API 速率耗尽,新的 API 请求将失败。
为什么 API 提供商要使用限制?
每个 API 提供商都限制其服务的某些部分。限制是为了保护您,但也可能令人沮丧。了解这些限制背后的原因将帮助您避免任何意外。
1. 防滥用保护
API 提供商使用限制的主要原因之一是为了公平对待使用其服务的每个人。他们必须小心分配多少带宽,就像任何其他公司必须小心为服务器上托管的网站分配多少带宽一样。
2. 降低成本
限制还有助于保护提供商免受因客户在无意中使用过多资源而产生的意外高额账单的影响。一些公司因使用超出预期的带宽而产生巨额账单,然后当提供商试图切断它们时拒绝偿还。通过施加限制,他们有望完全避免这种情况。
3. 密钥
一些 API 使用密钥来识别其服务的用户。如果密钥受到限制,则可以确保没有重复的密钥,并且只有一个用户可以访问您的服务。此类密钥的一个示例是跟踪用户在网站内的活动的会话 cookie。
如果 API 调用用完,您的应用程序或网站会发生什么情况?
当您用完典型应用程序上的 API 调用时,您的应用程序将停止工作。任何在网络上运行的应用程序都会发生这种情况。以下是您会注意到的常见事项:
1. 状态/错误代码
达到 API 限制时发生的第一件事是,您的软件会从 API 提供商处获得状态/错误代码。
- 您无法再检索数据。相反,您将收到 HTTP 代码,例如 403(禁止)或 500(内部服务器错误)。
- 如果您尝试直接通过 IP 或域访问端点,它们将返回 HTTP 503(服务不可用)状态代码。在解决 API 限制问题之前,每次您的软件尝试调用 API 服务时,都会使用相同的状态代码。
2. 暂停API服务
接下来,API 服务将停止为您的应用程序/网站提供 API 函数和数据。当您登录 API 提供商用户仪表板时,您可能会注意到有一条消息指出:
您已超出每月请求限额。
您当前的订阅计划在此期间不允许任何进一步的 API 请求。为了最大限度地减少服务中断,您可能需要考虑升级您的订阅计划。
控制面板 – 仪表板的屏幕截图,来自https://aviationstack.com/dashboard
您可能会在用户仪表板的“API 使用情况”页面上再次看到相同的消息。
截图取自https://aviationstack.com/usage
克服 API 速率限制的 3 个步骤
耗尽 API 调用可能会给您的应用程序或网站带来严重问题。它甚至可能导致它无限期地离线。如果您在 API 调用上运行精简,您可能需要考虑以下方法来防止这种情况发生。
一旦您的使用量超过 API 调用次数,有两种选择:
1. 获取您的API速率限制状态
如果您使用付费计划,那么您可能已经熟悉 API 速率限制状态。但是,如果您使用免费帐户,那么您可能是第一次遇到 API 速率限制。
许多服务的 API 会返回包含当前速率限制状态的 HTTP 标头。如果您要发出大量请求,则应该在每个请求上检查此标头,以确保不会超出速率限制。
此外,您可以通过以下方式找到 API 速率限制状态:转到开发人员控制台,单击 API 访问,然后查看速率限制部分。
在这里,您将看到每日配额以及今天迄今为止已发出的请求数。
2. 购买更多API调用
现在您知道如何检查 API 限制,但如果您已经达到这些限制怎么办?下一步是从服务提供商处购买更多 API 调用。不同计划的成本各不相同,并且取决于多种因素。不过,您可以随时查看服务提供商的官方网站,了解有关您可以购买的数量和费用的更多信息。
3. 将您的应用程序纳入企业计划
如果您想构建可扩展的应用程序,则需要从一开始就考虑到增长。未能规划 API 使用可能会导致您达到速率限制。
为了防止出现此问题,让您的应用程序获得更高级别的企业计划至关重要。企业计划是您预先支付更高容量费用的地方。这种方法的优点是,您的应用程序不会用完请求令牌并被关闭,因为您已经支付了足够的容量费用。
如果您的应用程序包含在企业计划中,您可以预先购买额外的容量。该程序允许您拥有更高的配额,因此您不必担心其他应用程序或大量下载会达到配额限制。如果它不在企业程序中,您可以将其从免费程序切换到企业程序。
最后的想法
当您达到 API 速率限制时,应用程序将停止正常工作。他们要么停止显示数据,要么开始要求付费才能访问您真正需要的信息。为了帮助您避免这种情况,请尝试跟踪您的应用程序使用每个 API 的次数,这样就不会意外发生。
更好的是,您应该主动订阅一个计划,该计划将为您的应用程序提供足够的 API 请求限制,这样您就不会在时机成熟时手忙脚乱地修复它。