在 AWS 設計 API

在 AWS 上開發應用程式

Ricardo Sueiras

Principal Technologist

API Gateway

 

什麼是 API

 

  • Amazon API Gateway:用來建構 API 的受管服務。
  • 設計、部署、管理並保護你的 API。
在 AWS 上開發應用程式

Amazon API Gateway 功能

 

API 功能

  • 實作不同型態的 API。
在 AWS 上開發應用程式

Amazon API Gateway 功能

 

API 功能

  • 實作不同型態的 API。
  • 與後端服務整合。
在 AWS 上開發應用程式

Amazon API Gateway 功能

 

API Gateway 功能

  • 實作不同型態的 API。
  • 與後端服務整合。
  • 保護 API 存取。
在 AWS 上開發應用程式

Amazon API Gateway 功能

 

API Gateway 功能

  • 實作不同型態的 API。
  • 與後端服務整合。
  • 保護 API 存取。
  • 節流請求以保護後端。
在 AWS 上開發應用程式

Amazon API Gateway 功能

 

API Gateway 功能

  • 實作不同型態的 API。
  • 與後端服務整合。
  • 保護 API 存取。
  • 節流請求以保護後端。
  • 轉換請求與回應的承載。
在 AWS 上開發應用程式

Amazon API Gateway 功能

 

API Gateway 功能

  • 實作不同型態的 API。
  • 與後端服務整合。
  • 保護 API 存取。
  • 節流請求以保護後端。
  • 轉換請求與回應的承載。
  • 對外發布 API。
在 AWS 上開發應用程式

Amazon API Gateway 功能

 

API Gateway 功能

  • 實作不同型態的 API。
  • 與後端服務整合。
  • 保護 API 存取。
  • 節流請求以保護後端。
  • 轉換請求與回應的承載。
  • 對外發布 API。
  • 管理 API 生命週期:版本、部署、別名。
在 AWS 上開發應用程式

API 類型

  • API Gateway 支援 3 種 API 類型:
    • REST APIs
    • HTTP APIs
    • WebSocket APIs

 

API 類型

在 AWS 上開發應用程式

API Gateway 端點

  • 端點決定用戶端如何連到你的 API。
  • Edge-optimized:AWS 代管的 CloudFront,全球低延遲。
  • Regional:部署於特定 AWS 區域。
  • Private:僅能透過 AWS PrivateLink 存取。
  • 私有端點不經過公用網際網路。

 

端點

在 AWS 上開發應用程式

REST APIs

  • 功能最完整的 API Gateway 產品。
  • 採同步請求/回應模型。

 

REST APIs

在 AWS 上開發應用程式

REST API 使用情境

 

API REST 使用情境

  • 需完整生命週期管理的企業級 API。
  • 需要進階安全控管的 API。
  • 含 API 金鑰與使用方案的第三方開發者生態。
  • 不需 Lambda 的直接 AWS 服務整合。
在 AWS 上開發應用程式

API Gateway REST API 支援

 

REST API 支援

  • 請求驗證。
  • API 金鑰。
  • 使用方案與節流。
  • 可設定 TTL 的回應快取。
  • 透過 VTL 範本轉換請求/回應。
  • IAM 驗證(Signature V4)。
  • Lambda 授權器、Cognito 使用者池。
在 AWS 上開發應用程式

API Gateway REST API 支援

 

 

REST API 支援

  • 支援三種端點:
    • Edge-optimized
    • Regional
    • Private
  • 透過 AWS WAF 防護網路攻擊。
  • 金絲雀版部署。
  • 以 AWS X-Ray 與 CloudWatch 日誌提升可觀測性。
在 AWS 上開發應用程式

REST APIs 取捨

  • 比 HTTP APIs 成本更高。
  • 延遲略高。

 

REST 取捨

在 AWS 上開發應用程式

HTTP APIs

  • 以效能與成本為優先,取代功能廣度:
    • 效能
    • 成本

 

HTTP APIs

在 AWS 上開發應用程式

HTTP API 使用情境

  • 無伺服器工作負載與以 Lambda 為後端的 API。
  • 微服務與輕量代理 API。
  • 對延遲敏感的應用。
  • 使用 OAuth 2.0/OIDC 驗證的 API。

 

HTTP API 使用情境

在 AWS 上開發應用程式

API Gateway HTTP API 支援

 

HTTP API 功能

  • Lambda 代理整合與授權器。
  • 原生 JWT/OIDC 授權(Cognito、Auth0、Okta)。
  • API 層級的內建 CORS 設定。
  • 透過 VPC Link 的私有 VPC 整合。
  • 基本標頭、查詢字串、路徑的參數對應。
在 AWS 上開發應用程式

HTTP API 取捨

 

HTTP API 限制

  • HTTP APIs 不支援:

    • API 金鑰
    • 使用方案
    • 請求驗證
    • 回應快取
    • 使用 AWS X-Ray 追蹤
    • VTL 承載轉換

    • 僅支援:

      • Edge 或私有端點(僅 regional)
在 AWS 上開發應用程式

WebSocket APIs

 

WebSocket APIs

  • 客戶端與伺服器之間的雙向通訊。
  • 連線會保持開啟,不同於 REST 與 HTTP APIs。
  • 伺服器可主動推送資料給已連線用戶端。
在 AWS 上開發應用程式

WebSocket API 使用情境

  • 聊天應用。
  • 即時通知。
  • 即時儀表板。

 

使用情境

在 AWS 上開發應用程式

API Gateway WebSocket API 支援

  • 承載資料轉換。
  • 請求驗證。
  • 特殊內建路由:
    • $connect:用戶端建立連線
    • $disconnect:用戶端中斷連線
    • $default:找不到相符路由

 

WebSocket API 功能

在 AWS 上開發應用程式

API 快取

  • 回應快取可降低後端負載。
  • 提升 API 效能。
  • 常見情境:
    • 高頻查詢資料
    • 讀取為主的 API
    • 減少 Lambda 啟動次數

 

API 快取

在 AWS 上開發應用程式

API 快取

 

API 快取回應

  • 快取回應會在可設定的 TTL 後過期。
  • 管理過期資料方式:
    • 設定快取到期
    • 清除快取
在 AWS 上開發應用程式

API 設計實務:清楚的資源命名

 

API 設計 - 名詞

  • 路徑應代表資源,而非動作。
  • 用名詞,不用動詞。
  • 佳例:
    • GET /orders/123
  • 避免:
    • GET /getOrder/123
在 AWS 上開發應用程式

API 設計實務:版本控管

 

API 版本控管

  • 版控 API,讓它能安全演進。
  • 避免影響既有用戶端。
  • 常見做法:
    • URI 版控:GET /v1/orders
    • 查詢參數:GET /orders?version=1
    • HTTP 標頭:Accept-Version: v1
在 AWS 上開發應用程式

API 開發者入口網站

  • 透過網頁入口發布並分享 REST API。
  • 提供給 API 使用者的文件。
  • 主要功能:
    • API 文件(Swagger 檔)
    • 使用者導入流程
    • SDK 下載
    • API 金鑰註冊與訂閱流程

 

api gateway 入口網站

在 AWS 上開發應用程式

OpenAPI 規格

  • OpenAPI(Swagger):描述 REST API 的標準方式。
  • API Gateway 可匯入與匯出 OpenAPI 規格。

 

API Gateway 的 Swagger 支援

在 AWS 上開發應用程式

一起來練習吧!

在 AWS 上開發應用程式

Preparing Video For Download...