API 開發
在 AWS 上開發應用程式
Ricardo Sueiras
Principal Technologist
API Gateway 整合
- 多種後端整合選項
- HTTP:任何可公開路由的端點
- AWS 服務 API,如 DynamoDB 或 SNS
- Lambda 函式
- 透過 VPC 連結存取私有資源
- 無需真實後端的模擬回應
整合類型:代理(proxy)
- 整合類型決定 API Gateway 的控制程度
- 代理類型:
AWS_PROXY 與 HTTP_PROXY
- 將整個 HTTP 請求直接送至後端
- API Gateway 僅透明轉送
- 回應由後端產生
整合類型:非代理(non-proxy)
- 非代理類型:
AWS 與 HTTP
- 你可設定請求與回應轉換
- 由對應範本驅動
- 範本使用 Velocity Template Language(VTL)撰寫
請求驗證
- 在到達後端前先驗證請求
- 捕捉遺漏的必要欄位
- 捕捉無效的 JSON 格式
- 捕捉錯誤的參數型別
- 失敗通常回傳
400 Bad Request
請求驗證
- 驗證可涵蓋:
- 標頭(Headers)
- 查詢字串參數
- 請求本文(body)
- JSON 結構描述(schema)
請求驗證
- 驗證帶來的效益:
- 減少無效的後端請求
- 降低 Lambda 執行成本
- 提升 API 可靠性
轉換(Transformations)
- 不改動後端程式碼即可重塑請求與回應
- 更改負載結構
- 重新命名欄位
- 轉換標頭
- 轉換資料格式
- 隱藏實作細節
- 由 VTL 對應範本驅動
錯誤處理
- 兩大錯誤類別
- Gateway 錯誤:由 API Gateway 產生
- 整合錯誤:後端失敗
- 常見 Gateway 錯誤:
400 Bad Request:請求驗證失敗
429 Too Many Requests:超出節流限制
錯誤處理
- 常見整合錯誤:
502 Bad Gateway:回應格式錯誤或不良
503 Service Unavailable:後端無法使用或過載
504 Gateway Timeout:超過 29 秒逾時
- 區域型與私有 REST API 可延長超過 29 秒
記錄(Logging)
- 執行記錄與 CloudWatch 指標是關鍵疑難排解工具
- API Gateway 可與 CloudWatch 整合以提供:
記錄(Logging)
- CloudWatch 記錄可協助你排解:
- 整合失敗
- 轉換錯誤
- 授權失敗
- Lambda 執行問題
階段:跨環境管理 API
- 一份 API 定義可服務多個環境
- API Gateway 以「階段」管理這些環境
階段:跨環境管理 API
- 一份 API 定義可服務多個環境
- API Gateway 以「階段」管理這些環境
- 階段是具名參照
- 指向你 API 設定的部署快照
階段:跨環境管理 API
- 一份 API 定義可服務多個環境
- API Gateway 以「階段」管理這些環境
- 階段是具名參照
- 指向你 API 設定的部署快照
- 常見階段名稱:
階段:跨環境管理 API
- 一份 API 定義可服務多個環境
- API Gateway 以「階段」管理這些環境
- 階段是具名參照
- 指向你 API 設定的部署快照
- 常見階段名稱:Dev、Test、QA、Prod
- 每個階段的呼叫 URL 會不同
階段:跨環境管理 API
- 一份 API 定義可服務多個環境
- API Gateway 以「階段」管理這些環境
- 階段是具名參照
- 指向你 API 設定的部署快照
- 常見階段名稱:Dev、Test、QA、Prod
- 每個階段的呼叫 URL 會不同
- 多個階段可指向同一部署,便於立即回滾
階段功能
- 各階段可獨立設定
- 設定包含階段變數
- 階段變數為鍵值配對
- 讓同一部署導向不同後端
- 環境變更無需重新部署
階段功能
- 金絲雀部署(Canary)
- 僅限 REST API
- 將部分流量導向新部署
- 視情況提升為全面釋出
- 刪除金絲雀即可回滾
階段功能
- 節流(Throttling)
- 於階段層級設定
- 套用至所有方法,可針對單一方法覆寫
階段功能
- 節流
- 於階段層級設定
- 套用至所有方法,可針對單一方法覆寫
- 快取(Caching)
- 僅限 REST API
- 於階段層級儲存後端回應
- 用戶端可用
Cache-Control 略過
- TTL 0 到 3600 秒,預設 300
階段功能
- 記錄有兩種模式
- 存取記錄
- 由
$context 變數組成,送至 CloudWatch 記錄群組
- 執行記錄
- 擷取完整請求與回應細節
Preparing Video For Download...