
API網(wǎng)關(guān)如何發(fā)展:更輕、更智能、云原生
"error": {
"message": "You did not provide an API key. You need to provide your API key in the Authorization header, using Bearer auth (e.g. 'Authorization: Bearer YOUR_SECRET_KEY'). See https://stripe.com/docs/api#authentication for details, or we can help at https://support.stripe.com/.",
"type": "invalid_request_error"
}
}
看看這比簡單的 4xx 或 5xx 代碼有用多少,您只能猜測哪里出了問題? Stripe API 的錯(cuò)誤消息不僅告訴您出了什么問題,而且還告訴您如何修復(fù)它。
Merge API是一種用于通過單一來源整合許多不同 API 的 API。他們有額外的動(dòng)力來提供高質(zhì)量的錯(cuò)誤消息。合并 API 從多個(gè)來源接收API 錯(cuò)誤,然后需要以一致且可理解的方式返回這些錯(cuò)誤。
例如,當(dāng)您查詢 Merge API 查找不存在的資源時(shí),您會(huì)收到以下響應(yīng):
{
"status": 400,
"error": "Not Found",
"message": "The requested resource was not found on this server.",
"path": "/api/users/5678",
"timestamp": "2024-10-20T12:34:56Z"
}
通過包含路徑,用戶可以仔細(xì)檢查以確保他們正在查詢正確的端點(diǎn)。返回時(shí)間戳使得 API 錯(cuò)誤消息也有助于調(diào)試和日志記錄,從而允許用戶檢查特定資源在特定時(shí)間是否不可用。
Instagram 每月?lián)碛谐^ 20 億活躍用戶。他們更有理由擁有任何人都可以輕松理解的深入、有用的 API 錯(cuò)誤消息。當(dāng)用戶對太大而無法下載的圖像發(fā)出 API 請求時(shí),他們會(huì)看到以下響應(yīng):
{
"error":
{
"message": "The image size is too large.",
"type": "OAuthException",
"code": 36000,
"error_subcode": 2207004,
"is_transient": false,
"error_user_title": "Image size too large",
"error_user_msg": "The image is too large to download. It should be less than 8 MiB.",
"fbtrace_id": "A6LJylpZRKw2xKLFsAP-cJh"
}
}
這在某種程度上違背了我們關(guān)于不需要說明手冊來理解 API 錯(cuò)誤消息的評論,但它仍然是自我描述的。該消息詳細(xì)說明了問題所在。錯(cuò)誤代碼和子代碼提供了有關(guān)問題以及如何修復(fù)它的更多詳細(xì)信息。這種方法對于執(zhí)行許多不同操作的 API 很有幫助,因?yàn)樽哟a可用于識別未按應(yīng)有方式運(yùn)行的特定函數(shù)。
Salesforce API是目前 Postman 上最受歡迎的集合,說明了這個(gè)強(qiáng)大的銷售和營銷平臺(tái)有多么受歡迎。由于有如此多的用戶通過 API 執(zhí)行如此多的財(cái)務(wù)敏感業(yè)務(wù),因此需要詳細(xì)、有用的 API 錯(cuò)誤消息。
Salesforce API 并不令人失望,有 14 條獨(dú)特的 4xx 錯(cuò)誤消息和 3 條 5xx 消息。是的,他們的許多錯(cuò)誤消息都非常簡單,但是無論如何,有這么多不同的錯(cuò)誤消息可以讓用戶確切地知道出了什么問題。例如,在登錄時(shí)提供錯(cuò)誤的憑據(jù)會(huì)返回一個(gè)簡單的401
錯(cuò)誤:
{"error_description": "Client authentication failed", "error": "invalid_client"}
忽略正確格式化查詢可能會(huì)返回428
錯(cuò)誤,而是:
{"error_description": "The request wasn't executed because it wasn't conditional. Add one of the Conditional Request Headers, such as If-Match, to the request and resubmit it.", "error": "PRECONDITION_REQUIRED"}
我們將用另一個(gè)連接器 API 來完成我們的列表,因?yàn)樗鼈兙哂腥绱藦V泛的功能并且需要如此具體。 Reltio API是一套用于將數(shù)據(jù)集成到一個(gè)平臺(tái)的工具,很像 Merge API。不過,Reltio 更深入,讓您可以通過一系列 API 執(zhí)行 CRUD。
Integrate API 是最令人印象深刻的,因?yàn)樗槍Ω鞣N最流行的 API、工具和資源的專用功能。每個(gè)連接器都有自己的錯(cuò)誤代碼,正如您在 Salesforce 集成中看到的那樣:
Error 1020: Invalid request, tenant {tenantId} is forbidden for current user
當(dāng)你在Reltio API文檔中查看這個(gè)錯(cuò)誤時(shí),它也給了你一個(gè)解決方案。這打破了自我描述的規(guī)則,但它可以通過它所使用的廣泛工具來彌補(bǔ)。
API 不僅限于返回簡單的503
錯(cuò)誤。由于能夠提供 JSON 或 XML 等資源,因此可以返回有關(guān) API 運(yùn)行情況的詳細(xì)文檔。正如 Fielding 所設(shè)想的那樣,API 錯(cuò)誤消息首先是 API 潛力的最佳體現(xiàn)之一,使用戶無需查閱 API 文檔。 API 錯(cuò)誤消息是提升開發(fā)人員體驗(yàn)和最終客戶體驗(yàn)的最快、最簡單且成本最低的方法之一。
當(dāng)然,平衡效率和安全性很重要。 API 錯(cuò)誤消息暴露了太多信息。對于 API 開發(fā)人員來說,在編寫 API 錯(cuò)誤消息時(shí)牢記API 安全最佳實(shí)踐非常重要,因?yàn)槊舾行畔⒖赡軙?huì)導(dǎo)致未經(jīng)授權(quán)的用戶獲得網(wǎng)絡(luò)訪問權(quán)限。信息和安全性之間的正確平衡可以為參與 API 的每個(gè)人提供更好的體驗(yàn)。
原文鏈接:https://nordicapis.com/5-real-world-examples-of-great-api-error-messages/