
為什么應該從靜態 API 令牌遷移到 OAuth 2.0
首先,我們要明確 “API 限制 “的含義。
API 提供商是提供應用程序接口 (API) 訪問權限的組織。API 是一套用于構建軟件應用程序的例程、協議和工具。
您的應用程序會向 API 提供商的服務器提交請求,詢問有關如何與屬于同一生態系統的其他服務進行交互的信息或說明。
為確保服務正常運行,提供商會對每分鐘或每小時可發出的請求數量進行限制。這樣,他們就可以管理負載,為每個請求提供最佳服務。
API 速率限制是指應用程序在指定時間內可進行的 API 調用或請求次數。除了并發 API 調用外,積極的輪詢和快速的配置更新也會導致應用程序受到速率限制。
API 請求是您從 API 請求數據時遵循的方法。您可以使用請求來發送您希望 API 處理的信息。
例如,您可以使用 API 請求從服務器或應用程序請求您的個人資料或用戶信息。您還可以使用它來發送您希望 API 處理的數據。
API 請求有兩種類型:GET 和 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 端點都經過身份驗證。身份驗證確定最終用戶是誰并計算用戶發出的請求數量。
授權令牌或密鑰是身份驗證機制中最終用戶的識別憑證。使用電子郵件進行基本身份驗證還可以確定最終用戶是誰。
應用程序權限使用識別憑據來確定是否應接受或拒絕請求。
身份驗證令牌或密鑰將最終用戶標識為應用程序的所有者。即JSON Web 令牌 (JWT)或不透明字符串令牌。生成的每個 API 令牌都是單獨計算的,即使應用程序的最終用戶多次生成也是如此。如果 API 速率耗盡,新的 API 請求將失敗。
每個 API 提供商都限制其服務的某些部分。限制是為了保護您,但也可能令人沮喪。了解這些限制背后的原因將幫助您避免任何意外。
API 提供商使用限制的主要原因之一是為了公平對待使用其服務的每個人。他們必須小心分配多少帶寬,就像任何其他公司必須小心為服務器上托管的網站分配多少帶寬一樣。
限制還有助于保護提供商免受因客戶在無意中使用過多資源而產生的意外高額賬單的影響。一些公司因使用超出預期的帶寬而產生巨額賬單,然后當提供商試圖切斷它們時拒絕償還。通過施加限制,他們有望完全避免這種情況。
一些 API 使用密鑰來識別其服務的用戶。如果密鑰受到限制,則可以確保沒有重復的密鑰,并且只有一個用戶可以訪問您的服務。此類密鑰的一個示例是跟蹤用戶在網站內的活動的會話 cookie。
當您用完典型應用程序上的 API 調用時,您的應用程序將停止工作。任何在網絡上運行的應用程序都會發生這種情況。以下是您會注意到的常見事項:
達到 API 限制時發生的第一件事是,您的軟件會從 API 提供商處獲得狀態/錯誤代碼。
接下來,API 服務將停止為您的應用程序/網站提供 API 函數和數據。當您登錄 API 提供商用戶儀表板時,您可能會注意到有一條消息指出:
您已超出每月請求限額。
您當前的訂閱計劃在此期間不允許任何進一步的 API 請求。為了最大限度地減少服務中斷,您可能需要考慮升級您的訂閱計劃。
控制面板 – 儀表板的屏幕截圖,來自https://aviationstack.com/dashboard
您可能會在用戶儀表板的“API 使用情況”頁面上再次看到相同的消息。
截圖取自https://aviationstack.com/usage
耗盡 API 調用可能會給您的應用程序或網站帶來嚴重問題。它甚至可能導致它無限期地離線。如果您在 API 調用上運行精簡,您可能需要考慮以下方法來防止這種情況發生。
一旦您的使用量超過 API 調用次數,有兩種選擇:
如果您使用付費計劃,那么您可能已經熟悉 API 速率限制狀態。但是,如果您使用免費帳戶,那么您可能是第一次遇到 API 速率限制。
許多服務的 API 會返回包含當前速率限制狀態的 HTTP 標頭。如果您要發出大量請求,則應該在每個請求上檢查此標頭,以確保不會超出速率限制。
此外,您可以通過以下方式找到 API 速率限制狀態:轉到開發人員控制臺,單擊 API 訪問,然后查看速率限制部分。
在這里,您將看到每日配額以及今天迄今為止已發出的請求數。
現在您知道如何檢查 API 限制,但如果您已經達到這些限制怎么辦?下一步是從服務提供商處購買更多 API 調用。不同計劃的成本各不相同,并且取決于多種因素。不過,您可以隨時查看服務提供商的官方網站,了解有關您可以購買的數量和費用的更多信息。
如果您想構建可擴展的應用程序,則需要從一開始就考慮到增長。未能規劃 API 使用可能會導致您達到速率限制。
為了防止出現此問題,讓您的應用程序獲得更高級別的企業計劃至關重要。企業計劃是您預先支付更高容量費用的地方。這種方法的優點是,您的應用程序不會用完請求令牌并被關閉,因為您已經支付了足夠的容量費用。
如果您的應用程序包含在企業計劃中,您可以預先購買額外的容量。該程序允許您擁有更高的配額,因此您不必擔心其他應用程序或大量下載會達到配額限制。如果它不在企業程序中,您可以將其從免費程序切換到企業程序。
當您達到 API 速率限制時,應用程序將停止正常工作。他們要么停止顯示數據,要么開始要求付費才能訪問您真正需要的信息。為了幫助您避免這種情況,請嘗試跟蹤您的應用程序使用每個 API 的次數,這樣就不會意外發生。
更好的是,您應該主動訂閱一個計劃,該計劃將為您的應用程序提供足夠的 API 請求限制,這樣您就不會在時機成熟時手忙腳亂地修復它。
原文鏈接:What Happens When You Hit Your Monthly API Rate Limit?