Amazon API Gateway 入門

建立免費帳戶

Amazon API Gateway 免費方案包含最多 12 個月每月 100 萬個 API 呼叫。

問:什麼是 Amazon API Gateway?

Amazon API Gateway 是一種全受管的服務,可讓開發人員輕鬆發佈、維護、監控和保護任何規模的 API。只要按幾下 AWS 管理主控台,您就能建立 API 作為應用程式從後端服務 (例如,在 Amazon Elastic Compute Cloud (Amazon EC2) 上執行的應用程式、在 AWS Lambda 上執行的程式碼,或任何 Web 應用程式) 存取資料、商業邏輯或功能的「門戶」。Amazon API Gateway 負責處理有關接受和處理多達數十萬個並行 API 呼叫的所有工作,包括流量管理、授權和存取控制、監控和 API 版本管理。Amazon API Gateway 沒有最低費用或啟動成本。您只需為收到的 API 呼叫以及傳出的資料量付費。

問:為什麼要使用 Amazon API Gateway?

Amazon API Gateway 為開發人員提供一個簡單、靈活、全受管、按用量付費的服務,可以處理針對應用程式後端而建立和操作穩固 API 的所有層面。透過 Amazon API Gateway,您可以用較少的投資更快速啟動新服務,以便將重點放在建置核心商業服務上。Amazon API Gateway 的建置是為了協助您建立和管理 API 的幾個層面:

1) 計量。API Gateway 可協助定義計量和限制第三方開發人員對您 API 存取的計劃。您可以依個別 API 金鑰定義一組計劃、設定調節和配額限制。API Gateway 會自動測量到 API 的流量,並讓您擷取每個 API 金鑰的使用率資料。

2) 安全性。API Gateway 提供的多個工具可讓您授權 API 存取和控制服務操作存取。Amazon API Gateway 可讓您利用 AWS 管理和安全工具 (例如,AWS Identity and Access Management (IAM) 和 Amazon Cognito) 授權 API 存取。Amazon API Gateway 可使用 AWS 驗證本身 API 的相同方法,代替您驗證已簽署的 API 呼叫。使用編寫為 AWS Lambda 函數的自訂授權方,API Gateway 也可以協助您驗證傳入的 bearer 字符,這樣就能解決後端程式碼的授權問題。

3) 靈活度。Amazon API Gateway 協助您利用調節管理流量,以便讓後端操作能應付流量峰值。Amazon API Gateway 也可以快取 API 呼叫的輸出,以避免不必要地呼叫後端系統,藉此協助您提升 API 的效能及改善最終使用者經驗的延遲情況。

4) 操作監控。發佈 API 並開始使用後,API Gateway 會提供您一個指標儀表板,讓您監控服務呼叫。Amazon API Gateway 儀表板透過與 Amazon CloudWatch 的整合,為您提供後端效能指標,涵蓋 API 呼叫、延遲資料以及錯誤率。您可以為 API 內的每個方法啟用詳細的指標,同時接收錯誤、存取或偵錯 CloudWatch Logs 中的記錄

5) 生命週期管理。在 API 發佈之後,通常您需要建置並測試增強功能或新增功能的新版本。Amazon API Gateway 可讓您同時測試多個 API 版本和每個版本的多個階段,這樣即使新的 API 版本發佈之後,現有的應用程式仍然可以繼續呼叫之前的版本。

6) 專為開發人員而設計。Amazon API Gateway 可讓您快速建立 API,為它們的回應指派靜態內容,以降低跨團隊開發投入,縮短應用程式的上市時間。倚賴 API 的團隊可以在您建置後端程序時開始開發。

問:如何開始使用 Amazon API Gateway?

您可以使用 Amazon API Gateway 輕鬆快速地建立自訂 API。請依照下列步驟完成簡單的 "Hello World" 範例:

1.移至 Amazon API Gateway 主控台。

2.  選取現有的 REST API 或輸入 API 的名稱建立新的 API。

3.  在 REST API 樹狀檢視中,按一下“Create Resource”。

4.為您的資源選擇一個名稱,像是 "cars"。

5.選取新的資源後,按一下按鈕以建立新的方法,然後選取與該方法關聯的 HTTP 動詞,例如 GET。

6.  選取整合類型 (例如,HTTP Proxy),並輸入 Amazon API Gateway 應呼叫的 URL。

7.  使用映射範本定義請求和回應的轉換方法,或者接受預設的設定以傳送所有請求和回應資料,而不套用任何轉換。

8.  設定方法的安全性設定。

9.  將您的新 API 部署到階段。

10.階段管理頁面設定快取和調節。

11.在 Amazon API Gateway 主控台的 Client Platforms 標籤上,按一下按鈕以下載包含呼叫 sayHello 操作之協助程式方法的 Android、iOS SDK 或 JavaScript 程式庫。SDK 程式庫呼叫 API 的方法與呼叫本機方法很相似。用戶端 SDK 會自動處理重試、通知開發人員網路或其他失敗狀況。SDK 程式庫包含在 API 驗證用戶端應用程式所需的邏輯。

12.將下載的 SDK 整合到您的行動應用程式。編寫程式碼以叫用您的自訂 API。例如,叫用 iOS 應用程式中的 getCar(int carId) API:

–(void)getSampleCar

{

NSString *response = [MyServiceClient getCar:1323];

NSLog( @”Response was [%@]”, response );

}

13.執行您的應用程式。

問:我可以建立 HTTPS 終端節點嗎?

可以,使用 Amazon API Gateway 建立的所有 API 只會公開 HTTPS 終端節點。Amazon API Gateway 不支援未加密的 (HTTP) 終端節點。預設情況下,Amazon API Gateway 會指派內部網域給自動使用 Amazon API Gateway 憑證的 API。設定 API 在自訂網域名稱下執行時,您可以為網域提供自己的憑證。

問:Amazon API Gateway 可以與哪些資料類型搭配使用?

在 Amazon API Gateway 上建置的 API 可以接受透過 HTTP 傳送的任何承載。一般資料格式包括 JSON、XML、查詢字串參數以及要求標頭。您可以為 API 回應宣告任何內容類型,然後使用轉換範本,將後端回應變更為想要的格式。

問:Amazon API Gateway 可以與哪些後端通訊?

Amazon API Gateway 可以在您的帳戶中執行 AWS Lambda 函數、啟動 AWS Step Functions 狀態機器,或是呼叫 AWS Elastic Beanstalk、Amazon EC2 上託管的 HTTP 終端節點,以及可透過公有網際網路存取的 HTTP 操作上託管的非 AWS。API Gateway 也可讓您指定映射範本以產生要傳回的靜態內容,協助您在後端準備就緒前模擬 API。您也可以將 API Gateway 與其他 AWS 服務直接整合;例如,您可以在 API Gateway 中公開 API 方法,將資料直接傳送到 Amazon Kinesis。 

問:Amazon API Gateway 可以在哪些用戶端平台上產生 SDK?

API Gateway 可以為針對 Android 與 iOS 的行動應用程式開發以及使用 JavaScript 的 Web 應用程式開發產生自訂 SDK。一旦在 API Gateway 中定義 API 及其模型之後,您就可以使用 AWS 主控台或 API Gateway API 來產生及下載用戶端 SDK。

問:哪些 AWS 區域提供 Amazon API Gateway?

請參閱區域性產品和服務,了解 Amazon API Gateway 服務在不同區域的具體提供情況。

問:我可以透過 Amazon API Gateway 主控台管理什麼?

您可以透過 Amazon API Gateway 主控台定義 REST API 及其關聯的資源和方法、管理 API 生命週期、產生用戶端 SDK 和檢視 API 指標。您也可以使用 API Gateway 主控台定義 API 的用量計劃、管理開發人員的 API 金鑰,以及設定調節和配額限制。透過 API Gateway API 可以使用所有相同的動作。

問:什麼是 REST API

在 Amazon API Gateway 中,REST API 是一組資源和方法,或終端節點。REST API 可以部署到不同的階段,也可以複製到新的版本。

問:什麼是資源?

資源是屬於 API 網域一部分的型別物件。每個資源可以關聯資料模型、與其他資源的關係,也可以回應不同的方法。您也可以將資源定義為變數,以攔截傳送到多個子資源的請求。

問:什麼是方法?

REST API 內的每個資源都可以支援一或多個標準 HTTP 方法。您可以定義每個資源支援哪些動詞 (GET、POST、PUT、PATCH、DELETE、HEAD、OPTIONS) 以及它們的實作。例如,對 cars 資源使用 GET 時,應該要傳回汽車清單。為了將資源內的所有方法連接到單一後端終端節點,API Gateway 也支援特殊的 "ANY" 方法。 

問:什麼是用量計劃?
用量計劃可協助您宣告針對第三方開發人員的計劃,這些計劃會限制他們只能存取特定 API、定義調節和請求配額限制,以及將他們與 API 金鑰建立關聯。您也可以擷取個別 API 金鑰的使用率資料,以分析 API 用量並產生帳單文件。例如,您可以建立基本、專業和企業計劃;設定基本用量計劃為每一天只允許 1,000 個請求,且每秒最多 5 個請求 (RPS)。

問:什麼是 Amazon API Gateway API 生命週期?

在 Amazon API Gateway 中,每個 REST API 都可以有多個階段。階段的用意是為協助 API 的開發生命週期,例如,在您建置 API 之後,將它們部署到開發階段,或是當您準備好進入生產時,可以將它們部署到生產階段。

問:什麼是階段?

在 Amazon API Gateway 中,階段類似於標籤。階段可定義部署存取路徑。例如,您可以定義開發階段,將 cars API 部署到其中。此資源可從 https://www.myapi.com/dev/cars 存取。您也可以設定自訂網域名稱直接指向階段,這樣就不必另外使用路徑參數。例如,如果您將 myapi.com 直接指向開發階段,即可在 https://www.myapi.com/cars 存取 cars 資源。可使用能夠從 API 組態或映射範本存取的變數來設定階段。

問:什麼是階段變數?
階段變數讓您定義與階段關聯之組態值的鍵值/值組。這些值與環境變數類似,可在 API 組態中使用。例如,您可以定義方法整合的 HTTP 終端節點作為階段變數,並在 API 組態使用變數而非以硬編碼方式編寫終端節點 – 這可讓您在使用相同 API 組態的每個階段 (例如,dev、beta、prod) 使用不同的終端節點。階段變數也可以在映射範本中存取,並用於將設定參數傳遞到 Lambda 或 HTTP 後端。

問:萬一我錯誤地部署到階段了呢?

Amazon API Gateway 會儲存部署的歷史記錄。您可以隨時使用 Amazon API Gateway API 或主控台,將階段復原到之前的部署。

問:是否可執行相同 REST API 的多個版本?

是。Amazon API Gateway 允許您複製現有 API。當您準備好開始使用 API 的下一主要版本時,您可以繼續同時使用版本 1 和版本 2 API。

問:我是否能使用自己的 Swagger API 定義?

是。您可以使用我們的開放原始碼 Swagger 匯入程式工具將自己的 Swagger API 定義匯入 Amazon API Gateway 中。利用 Swagger 匯入程式工具,您可以建立和部署新的 API,並能更新現有 API。

問:我的 API 如何在 API Gateway 中獲利?
若要在 API Gateway 從 API 獲利,您可以在 AWS Marketplace 中以產品的形式發行這些 API。首先,您需要在 AWS Marketplace 註冊為賣家,然後在 API Gateway 上以產品形式提交用量計劃。閱讀這裡以進一步了解 API 獲利。

問:如何在 Amazon API Gateway 上管理我的 API 文件?

API Gateway 可讓您建立、更新和刪除與 API 每個部分相關的文件,像是方法和資源。您可透過 AWS 開發套件、CLI、RESTful 呼叫來存取文件相關 API,或直接在 API Gateway 主控台中編輯文件字串。您也可將文件以 Swagger 檔案的形式與 API 一起或分開匯入,這能讓您在不影響 API 定義的情況下新增或更新文件。對於從 Swagger 檔案匯入或匯出的文件,API Gateway 會遵守開放 API 規格

問:如何避免我的 API 中經常出現的錯誤訊息和其他文件的冗餘副本?
除了提供標準的遵守 API 文件支援,API Gateway 還支援文件繼承,您只要定義文件字串一次,就能在多個地方使用。繼承簡化了定義 API 文件的處理程序,而且當 API 匯出成 Swagger 檔案時,還能轉換成標準表示法。

回到頁首 >>

問:如何授權對我的 API 的存取?

您可以使用 Amazon API Gateway 選擇性地設定 API 方法來要求授權。當您設定方法來要求授權時,可以利用 AWS 簽章版本 4 或自訂授權方來支援您自己的 bearer 字符授權策略。

問:AWS 簽章版本 4 如何運作?

您可以使用 AWS 登入資料 (存取金鑰和私密金鑰) 來簽署對您服務的請求,並如同其他 AWS 服務般授權存取。Amazon API Gateway API 請求的簽章是由為您的服務產生的自訂 API Gateway SDK 所管理。您可以使用 Amazon Cognito 擷取與您的 AWS 帳戶角色關聯的臨時登入資料。

問:什麼是自訂授權方?

自訂授權方是 AWS Lambda 函數。使用自訂請求授權程式,您將能夠使用 bearer 字符授權策略 (如 OAuth) 來授權 API 存取。當呼叫 API 的時候,API Gateway 會檢查是否已設定自訂授權方,然後 API Gateway 會使用傳入的授權字符呼叫 Lambda 函數。您可以使用 Lambda 實作各種授權策略 (例如,JWT 驗證、OAuth 提供者呼叫),它們會傳回用來授權請求的 IAM 政策。如果授權程式傳回的政策是有效的,API Gateway 會快取與傳入字符關聯的政策,時間最長可達 1 小時。

問:Amazon API Gateway 是否可產生分發給第三方開發人員的 API 金鑰?

是。API Gateway 可產生 API 金鑰,並將它們與用量計劃建立關聯。從每個 API 金鑰接收的呼叫會加入 Amazon CloudWatch Logs 並加以監控,您可以為每個階段啟用此功能。不過,不建議您將 API 金鑰用於授權。您應該使用 API 金鑰來監控第三方開發人員的使用情況,並使用更強固的機制 (如已簽章的 API 呼叫或 OAuth) 來進行授權。

問:如何解決或防止 API 威脅或濫用?

Amazon API Gateway 支援針對 API 中的每個方法制定調節設定。您可以為 REST API 中的每個方法設定每秒的標準速率限制和高載速率限制。不僅如此,Amazon API Gateway 還可以自動保護您的後端系統,免受分散式拒絕服務 (DDoS) 的攻擊,無論是使用盜版請求 (Layer 7) 或 SYN 泛洪 (Layer 3) 的攻擊。

問:Amazon API Gateway 是否可在 Amazon VPC 內運作?

否。Amazon API Gateway 終端節點一律公開到網際網路。對後端操作的 Proxy 要求也需要能夠在網際網路上公開存取。不過,您可以在 Amazon API Gateway 產生用戶端 SSL 憑證,使用憑證的公開金鑰確認對後端系統的要求是由 API Gateway 傳送。

問:是否能確認是 API Gateway 呼叫我的後端?
是。Amazon API Gateway 可以產生用戶端 SSL 憑證,並提供該憑證的公開金鑰給您。產生的憑證可用於呼叫後端,而您可以使用憑證的公開金鑰確認呼叫來自 Amazon API Gateway。

問:AWS CloudTrail 是否可與 Amazon API Gateway 搭配使用?

是。Amazon API Gateway 已與 AWS CloudTrail 整合,為您提供對 REST API 所做變更的完整可稽核歷史記錄。對 Amazon API Gateway API 進行的建立、修改、刪除或部署 REST API 的所有 API 呼叫,都會記錄到您 AWS 帳戶的 CloudTrail 中。

回到頁首 >>

問:如何監控我的 Amazon API Gateway API?

Amazon API Gateway 會將 API 呼叫、延遲和錯誤率記錄到您 AWS 帳戶的 Amazon CloudWatch 中。透過 REST API 儀表板中的 Amazon API Gateway 主控台也可以使用這些指標。API Gateway 也會測量第三方開發人員的使用率,在 API Gateway 主控台及透過 API 可使用此資料。

問:可以在 Amazon API Gateway 指標上設定警示嗎?

可以,Amazon API Gateway 會將記錄資訊和指標傳送到 Amazon CloudWatch。您可以使用 Amazon CloudWatch 主控台設定自訂警示。

問:如何設定 Amazon API Gateway 的指標?

預設情況下,Amazon API Gateway 會監控 REST API 層級的流量。您可以從部署設定 API 或主控台畫面,選擇性地為 REST API 中的每個方法啟用詳細的指標。詳細指標也會記錄到 Amazon CloudWatch,而且以 CloudWatch 費率收費。

問:是否可判斷客戶使用的 API 版本?

是。指標詳細資訊是由 REST API 和階段指定。此外,您也可以為 REST API 內的每個方法啟用指標。

問:Amazon API Gateway 是否提供記錄支援?

是。Amazon API Gateway 已與 Amazon CloudWatch Logs 整合。您可以選擇性為 API 中的每個階段啟用記錄。對於 REST API 中的每個方法,您可以設定記錄的詳細資訊,如果是完整要求和回應資料,必須記錄。

問:日誌多快可以提供使用?

日誌、警示、錯誤率及其他指標儲存在 Amazon CloudWatch 中,幾乎可以立即使用。

回到頁首 >>

問:如何保護後端系統與應用程式的流量高峰需求?

Amazon API Gateway 在多個層級 (包括全域) 且依照服務呼叫提供調節。調節限制可以設定標準速率和高載速率。例如,API 擁有者可以為 REST API 中的特定方法設定每秒 1,000 個請求的速率限制,也可以設定 Amazon API Gateway 只處理幾秒鐘的每秒 2,000 個請求的高載速率。Amazon API Gateway 會追蹤每秒的請求數量。超過限制的任何請求會收到一個 429 HTTP 回應。Amazon API Gateway 產生的用戶端 SDK 收到這個回應時,會自動重試呼叫。

問:是否可以調節個別開發人員呼叫我的 API?
是。有了用量計劃,您可為個別 API 金鑰設定調節限制。

問:調節對我有何幫助?

調節可確保 API 流量受到控制,讓後端服務可以保持效能及可用性。

問:Amazon API Gateway 可以在哪些層級針對傳入 API 流量實施調節?

調節速率限制可在方法層級設定。您可以透過 Amazon API Gateway API 或在 Amazon API Gateway 主控台中,編輯方法設定中的調節限制。

問:如何套用調節規則?
首先,API Gateway 會檢查您的 AWS 帳戶限制。如果流量低於設定的帳戶限制,API Gateway 會檢查您在階段或方法上設定的限制。如果流量低於階段限制,則 API Gateway 會套用您在個別 API 金鑰上設定的用量計劃限制。

問:Amazon API Gateway 是否提供 API 結果快取?

是。佈建 Amazon API Gateway 快取並指定其大小 (以 GB 為單位),即可將快取新增到 API 呼叫。快取是針對 API 的特定階段進行佈建。這可提高效能,並降低傳送到後端的流量。快取設定可讓您控制快取索引鍵的建置方法,以及每個方法所儲存資料的存活期 (TTL)。Amazon API Gateway 也會公開管理 API,協助您讓每個階段的快取失效。

問:如果大量最終使用者同時嘗試叫用我的 API,會發生什麼狀況?

如果沒有啟用快取且沒有套用調節限制,則在達到帳戶層級調節限制之前,所有請求都會傳送到後端服務。如果已設定調節限制,那麼 Amazon API Gateway 會削減必要的請求數量,只傳送定義的限制數量到後端服務。如果已設定快取,那麼 Amazon API Gateway 會在可自訂的時間內為重複要求傳回已快取的回應,但是只在低於設定的調節限制時。後端與用戶端之間的這種平衡,可確保 API 為所支援的應用程式提供最佳效能。Amazon API Gateway 產生的用戶端 SDK 會自動重試受到調節的請求。預設情況下,Amazon API Gateway 並不會在您的 API 方法上設定任何快取。

問:API 如何擴展?

Amazon API Gateway 的用途是做為已設定之後端操作的 Proxy。Amazon API Gateway 會自動擴展以處理 API 收到的流量。Amazon API Gateway 不會任意限制或調節對後端操作的叫用,而且未被 Amazon API Gateway 主控台中調節和快取設定攔截的所有請求,都會傳送到後端操作。

回到頁首 >>

問:使用 Amazon API Gateway 如何計費?

Amazon API Gateway 費率為每百萬個 API 呼叫 3.50 USD,加上傳出資料量 (以 GB 為單位) 的費用。如果您選擇為 API 佈建快取,則會套用小時費率。請參閱 API Gateway 定價頁面,了解資料傳輸和快取費用的詳細資訊。

問:第三方開發人員產生的 Amazon API Gateway API 呼叫費用由誰支付?

API 擁有者需支付在 API Gateway 上呼叫他們 API 的費用。

問:如果 API 回應是由已快取的資料提供服務,仍然需要支付 API 呼叫的費用嗎?

是。為了公平計費,無論回應是由後端操作處理或由 Amazon API Gateway 快取操作處理,都計入 Amazon API 呼叫。

回到頁首 >>