在 AWS 設計 API
在 AWS 上開發應用程式
Ricardo Sueiras
Principal Technologist
API Gateway
- Amazon API Gateway:用來建構 API 的受管服務。
- 設計、部署、管理並保護你的 API。
Amazon API Gateway 功能
- 實作不同型態的 API。
- 與後端服務整合。
- 保護 API 存取。
Amazon API Gateway 功能
- 實作不同型態的 API。
- 與後端服務整合。
- 保護 API 存取。
- 節流請求以保護後端。
Amazon API Gateway 功能
- 實作不同型態的 API。
- 與後端服務整合。
- 保護 API 存取。
- 節流請求以保護後端。
- 轉換請求與回應的承載。
Amazon API Gateway 功能
- 實作不同型態的 API。
- 與後端服務整合。
- 保護 API 存取。
- 節流請求以保護後端。
- 轉換請求與回應的承載。
- 對外發布 API。
Amazon API Gateway 功能
- 實作不同型態的 API。
- 與後端服務整合。
- 保護 API 存取。
- 節流請求以保護後端。
- 轉換請求與回應的承載。
- 對外發布 API。
- 管理 API 生命週期:版本、部署、別名。
API 類型
- API Gateway 支援 3 種 API 類型:
- REST APIs
- HTTP APIs
- WebSocket APIs
API Gateway 端點
- 端點決定用戶端如何連到你的 API。
- Edge-optimized:AWS 代管的 CloudFront,全球低延遲。
- Regional:部署於特定 AWS 區域。
- Private:僅能透過 AWS PrivateLink 存取。
- 私有端點不經過公用網際網路。
REST APIs
- 功能最完整的 API Gateway 產品。
- 採同步請求/回應模型。
REST API 使用情境
- 需完整生命週期管理的企業級 API。
- 需要進階安全控管的 API。
- 含 API 金鑰與使用方案的第三方開發者生態。
- 不需 Lambda 的直接 AWS 服務整合。
API Gateway REST API 支援
- 請求驗證。
- API 金鑰。
- 使用方案與節流。
- 可設定 TTL 的回應快取。
- 透過 VTL 範本轉換請求/回應。
- IAM 驗證(Signature V4)。
- Lambda 授權器、Cognito 使用者池。
API Gateway REST API 支援
- 支援三種端點:
- Edge-optimized
- Regional
- Private
- 透過 AWS WAF 防護網路攻擊。
- 金絲雀版部署。
- 以 AWS X-Ray 與 CloudWatch 日誌提升可觀測性。
HTTP API 使用情境
- 無伺服器工作負載與以 Lambda 為後端的 API。
- 微服務與輕量代理 API。
- 對延遲敏感的應用。
- 使用 OAuth 2.0/OIDC 驗證的 API。
API Gateway HTTP API 支援
- Lambda 代理整合與授權器。
- 原生 JWT/OIDC 授權(Cognito、Auth0、Okta)。
- API 層級的內建 CORS 設定。
- 透過 VPC Link 的私有 VPC 整合。
- 基本標頭、查詢字串、路徑的參數對應。
HTTP API 取捨
HTTP APIs 不支援:
- API 金鑰
- 使用方案
- 請求驗證
- 回應快取
- 使用 AWS X-Ray 追蹤
VTL 承載轉換
僅支援:
WebSocket APIs
- 客戶端與伺服器之間的雙向通訊。
- 連線會保持開啟,不同於 REST 與 HTTP APIs。
- 伺服器可主動推送資料給已連線用戶端。
API Gateway WebSocket API 支援
- 承載資料轉換。
- 請求驗證。
- 特殊內建路由:
$connect:用戶端建立連線
$disconnect:用戶端中斷連線
$default:找不到相符路由
API 快取
- 回應快取可降低後端負載。
- 提升 API 效能。
- 常見情境:
- 高頻查詢資料
- 讀取為主的 API
- 減少 Lambda 啟動次數
API 快取
- 快取回應會在可設定的 TTL 後過期。
- 管理過期資料方式:
API 設計實務:清楚的資源命名
- 路徑應代表資源,而非動作。
- 用名詞,不用動詞。
- 佳例:
- 避免:
API 設計實務:版本控管
- 版控 API,讓它能安全演進。
- 避免影響既有用戶端。
- 常見做法:
- URI 版控:
GET /v1/orders
- 查詢參數:
GET /orders?version=1
- HTTP 標頭:
Accept-Version: v1
API 開發者入口網站
- 透過網頁入口發布並分享 REST API。
- 提供給 API 使用者的文件。
- 主要功能:
- API 文件(Swagger 檔)
- 使用者導入流程
- SDK 下載
- API 金鑰註冊與訂閱流程
OpenAPI 規格
- OpenAPI(Swagger):描述 REST API 的標準方式。
- API Gateway 可匯入與匯出 OpenAPI 規格。
Preparing Video For Download...