全部產品
Search
文件中心

API Gateway:API定義問題

更新時間:Jan 24, 2025

本章節匯總了原API Gateway中API定義相關問題。

API定義問題

API定義問題

API Gateway是否支援gzip資料壓縮,是否需要添加要求標頭Accept-Encoding ?

支援的,同時符合以下三點時會將應答壓縮:

  • 請求中攜帶Accept-Encoding頭,並且這個欄位的值必須包含gzip。

  • 應答body大小大於2K。

  • 應答body contenttype為text/xml text/plain text/css application/javascript application/x-javascript application/rss+xml application/xml application/json application/octet-stream。

使用者傳了一個未定義的參數,網關將如何處理?

  • 入參映射(過濾未知參數)模式下,網關將過濾掉使用者多傳的參數。

  • 入參映射(透傳未知參數)模式和入參透傳模式下,網關會將參數透傳到後端服務。

後端服務是否可以使用HTTPS?

可以,在錄入後端服務地址時,請以https://開頭,且需要保證您的後端服務已有SSL認證。

API基礎定義是什嗎?

可以配置您API被訪問的方式,包含:http或https,以及使用HTTP方法,目前網關支援所有標準的HTTP方法。

為什麼要填寫API描述?

對於API功能的具體描述,會展示給您的使用者。

API類型是什嗎?

API的類型包含公開、私人兩種。若在雲市場上架商品,公開的介面會上架展示給客戶,私人介面不會展示給客戶。

API名稱是什嗎?

名稱是API的標識,一個有意義的名稱,可以讓您的使用者能夠快速理解API的功能。

API更新是否會有延遲?

不會,API一旦發布會立即生效。

如何使您的API支援HTTPS?

首先,您需要申請一張SSL認證,然後將SSL認證,將認證綁定到網關(查看分組管理—點擊分組名稱進入分組詳情-找到相應網域名稱-上傳認證)。

其次,將您的API請求協議修改為:HTTPS或者HTTP和HTTPS。

後端服務地址如何錄入?

  • 後端服務地址可以是網域名稱,也可以是IP,錄入時,要以http://或者https://開頭

  • 後端服務地址中支援動態參數,用[param]表示。

    • 後端服務地址中可以存在多個動態參數,多個動態參數名稱不可重複。

    • 後端服務地址中的動態參數需要配合Path中的動態參數使用,在配置Path時,配置與Path的映射關係。

為什麼要定義參數?

參數是API請求的重要組成部分,網關可以根據參數定義為您的使用者產生API手冊。

參數定義是必須的嗎?

不是,但推薦您定義,以便您的API使用者能夠清楚地理解您的API。

不定義參數網關如何處理?

會根據配置的入參請求模式進行處理。

參數定義包含什嗎?

描述參數在請求中的位置(pathheaderquerybody)、參數說明、參數樣本及參數值限制。

可以對參數做哪些限制?

網關不僅支援參數最大值、最小值、長度、枚舉校正,還支援正則、Json Schema校正。

Path是什嗎?

Path是您的API調用時展示給客戶的固定路徑,也是API的標識,在同一分組下HTTP Method+Path不可以重複。

  • 在Restful API中,一般表示為資源,格式為資源/子資源,如:instance/disk。

Path中支援動態參數,用[param]表示,如:instance/disk/[diskid],可以與後端服務地址中的動態參數進行映射。

如何配置Path與後端服務地址中的動態參數?

在配置Path時,控制台可以自動帶出後端服務地址中的動態參數,您需要將其與Path中動態參數對應上即可。

Path與後端服務地址中的動態參數名稱、順序是否必須保持一致?

不需要。在配置Path時,可以建立映射關係。

APP是什麼,怎麼從使用者實際的應用關聯到我們定義的APP,實際應用是移動端還是Web端?

APP是您在阿里雲的一個虛擬應用,是調用API時的身份標識,它可以是您的一個Web應用,也可以是移動端應用,或者其他。API網關會自動給每個APP分配一對APP KeySecret,用以簽章要求,調用API

如何指定調用環境?

調用API時,預設是調用線上環境的API。

如果要調用測試環境,請在header中增加參數:X-Ca-Stage:TEST。

如果要調用預發環境,請在header中增加參數:X-Ca-Stage:PRE。

如何擷取API Gateway報錯資訊?

所有的 API 請求只要到達了網關,網關就會返回請求結果資訊。

使用者需要查看應答的Header部分。其中X-Ca開頭的均為網關返回,比較重要訊息是:

  • X-Ca-Request-Id:請求唯一ID,請求一旦進入API Gateway應用後,API Gateway就會產生請求ID並通過回應標頭返回給用戶端,建議用戶端與後端服務都記錄此請求ID,以便用於問題排查與跟蹤。

  • X-Ca-Error-Message:API Gateway返回的錯誤訊息,當請求出現錯誤時API Gateway會通過回應標頭將錯誤訊息返回給用戶端。

  • X-Ca-Error-Code:API Gateway系統錯誤碼,當請求出現錯誤被網關攔截後,由API Gateway提供的錯誤碼。

在應答的Header中獲得X-Ca-Error-CodeX-Ca-Error-Message可以基本明確報錯原因,而X-Ca-Request-Id可以用於在Log Service中查詢請求日誌、通過控制台查詢結果、或提供給技術服務人員進行日誌排查。

X-Ca-Error-Code可以尋找錯誤碼表來擷取更詳細的排錯解釋。

如何關閉公網訪問?

API Gateway支援關閉分組的公網訪問,僅通過內網訪問。操作步驟如下:

  1. 登入API Gateway控制台,在左側欄單擊開放API——分組管理

  2. 在分組列表中找到想要關閉公網訪問的分組,單擊分組名稱進入分組詳情頁。

  3. 在分組詳情頁的公網次層網域後面找到關閉公網訪問按鈕,單擊確定後即可關閉公網訪問。

重要

關閉公網訪問後,所有來自公網的訪問,包括自訂公網網域名稱的訪問都將被拒絕,僅支援通過內網網域名稱調用。

API Gateway調試功能不支援內網網域名稱的調試。

HTTP/HTTPS請求的傳回值為空白

HTTP/HTTPS 請求的返回結果有 HttpCode、Header、Body 三部分。當請求報錯時,由於沒有進入商務邏輯,所以返回的 Body 可能為空白,表現為“傳回值為空白”,但實際上,重要訊息都在 Header 裡面。

使用者發起的 API 請求只要能夠到達網關,就會返回成功/錯誤的結果資訊。

重要的返回資訊都在Header裡面,以X-Ca開頭的為網關返回的資訊。其中較主要的為下面的幾個資訊:

X-Ca-Request-Id: 7AD052CB-EE8B-4DFD-BBAF-EFB340E0A5AF 
//請求唯一ID,請求一旦進入API Gateway應用後,API Gateway就會產生請求ID並通過回應標頭返回給用戶端,建議用戶端與後端服務都記錄此請求ID,可用於問題排查與跟蹤
X-Ca-Error-Message: Invalid Url  
//API Gateway返回的錯誤訊息,當請求出現錯誤時API Gateway會通過回應標頭將錯誤訊息返回給用戶端
X-Ca-Debug-Info: {"ServiceLatency":0,"TotalLatency":2}  
//當開啟Debug模式後會返回Debug資訊,此資訊後期可能會有變更,僅用做聯調階段參考

所以如果發送請求後,發現傳回值為空白,那麼看一下返回的 Header 資訊。如果請求到達網關就錯誤返回了,那麼 Body 為空白很正常,會表現為傳回值為空白,但是在 Header 裡面會有重要訊息。

如果Header也為空白,那麼說明請求沒有達到網關,請自行檢查網路狀況等。

各種語言擷取和查看 HTTP/HTTPS 頭部資訊的方法均可在網上查詢到。

HTTPS 認證報錯

調用 HTTPS 介面出現認證認證錯誤或者提示認證已經到期。

原因及解決方案

  1. 認證不合法

    API 提供者使用的認證是其他非主流機構頒發的認證,此類認證使用瀏覽器訪問是沒有問題的,因為瀏覽器會自動更新根憑證。但老版本作業系統的根憑證對這些機構(憑證授權單位)的不信任或者信任時間已經到期。

    解決方案:

    1. 升級用戶端根憑證。如:Java+Linux 升級 OpenSSL 用戶端即可,其他動作系統+程式設計語言,請升級程式設計語言中 HTTPS 使用的根憑證。

    2. 聯絡 API 提供者,要求其更換相容性更好的主流 SSL 憑證。

    3. 程式中忽略檢查 SSL 憑證有效性(不推薦),忽略後會有請求被劫持的安全風險。只在與 API 供應商無法提供相容性更好的主流 SSL 憑證,且安全風險可控的前提下,可以考慮使用此方法。

  2. API提供者的 SSL 憑證到期

    提供者的 SSL 憑證到期。

    解決方案:

    1. 聯絡 API 提供者,要求其更換 SSL 憑證。

    2. 程式中忽略檢查 SSL 憑證有效性(不推薦),忽略後會有請求被劫持的安全風險。只在與 API 供應商無法提供相容性更好的主流 SSL 憑證,且安全風險可控的前提下,可以考慮使用此方法。

後端服務調不通

如果您在使用API Gateway的過程中,遇到後端服務調不通的情況,您可參考如下方法進行排查:

  • 需要檢查您錄入的後端服務地址是否正確。

  • 需要保證您的後端服務可以被網關訪問到。

  • 檢查您API定義的“後端逾時”時間。

    在API定義時會要求您錄入一個逾時時間,當您的後端服務沒有在您指定的時間內返回時,API Gateway仍然會提示您無法串連後端服務。您可以根據後端服務的實際耗時對後端逾時進行調整,專享執行個體最大支援5min。

    說明

    注意:單位是ms(毫秒)。

    後端逾時時間注意不能設定為0,更多關於逾時時間的描述可參考TCP連線逾時時間配置

  • 如後端服務在 ECS ,請檢查安全性群組設定,是否可以被外部存取。請保證安全性群組可以被API Gateway的出口IP段訪問。

需要強調,API Gateway訪問外部的出口IP不能保證不會變動,通過設定安全性群組來判斷請求來源的方法可能會由於API Gateway出口IP變化而導致API Gateway訪問後端服務失敗,因此我們不建議使用安全性群組方法。API Gateway提供了完整的後端簽名驗證的方式來做身份認證,使用後端簽名機制可以完全避免這種不確定性,我們強烈建議使用此方法來確認請求來源。使用具體文檔:後端簽名外掛程式

API Gateway執行個體出口IP查看方法:

API Gateway的出口IP請查看分組所在執行個體的出口IP,具體查看方法:

1、 先登入API Gateway控制台-【API管理】-【分組管理】-【分組詳情】查看分組所在執行個體資訊。

2、到【執行個體與叢集】頁面查看對應執行個體的出口地址。