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 API
    • HTTP API
    • WebSocket API

 

API の種類

AWS でのアプリケーション開発

API Gateway エンドポイント

  • エンドポイントは、クライアントが API にアクセスする方法を制御します。
  • エッジ最適化: グローバルな低レイテンシーのために AWS が管理する CloudFront を使用します。
  • リージョン: 特定の AWS リージョンにデプロイされます。
  • プライベート: AWS PrivateLink 経由でのみアクセス可能です。
  • プライベートエンドポイントはパブリックインターネットを経由しません。

 

エンドポイント

AWS でのアプリケーション開発

REST API

  • API Gateway の中で最も機能が豊富なオプションです。
  • 同期的なリクエスト/レスポンスモデルに基づいています。

 

REST API

AWS でのアプリケーション開発

REST API のユースケース

 

REST API のユースケース

  • ライフサイクル全体の管理が必要なエンタープライズ 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 のサポート

  • 3 種類のエンドポイントタイプをサポート:
    • エッジ最適化
    • リージョン
    • プライベート
  • AWS WAF による Web エクスプロイト対策。
  • カナリアリリースのデプロイ。
  • AWS X-Ray と CloudWatch ログによる可観測性。
AWS でのアプリケーション開発

REST API のトレードオフ

  • HTTP API より費用がかかります。
  • わずかにレイテンシーが高くなります。

 

REST のトレードオフ

AWS でのアプリケーション開発

HTTP API

  • 機能の幅よりもパフォーマンスとコストを優先して最適化されています:
    • パフォーマンス
    • コスト

 

HTTP API

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 API がサポートしない機能:

    • API キー
    • 使用量プラン
    • リクエスト検証
    • レスポンスキャッシュ
    • AWS X-Ray によるトレース
    • VTL ペイロード変換

    • サポートするエンドポイント:

      • エッジまたはプライベート(リージョンのみ)
AWS でのアプリケーション開発

WebSocket API

 

WebSocket API

  • クライアントとサーバー間の双方向通信を実現します。
  • REST や HTTP API とは異なり、接続を維持し続けます。
  • サーバーから接続中のクライアントへデータをプッシュできます。
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 のバージョン管理

  • API をバージョン管理することで、安全に進化させられます。
  • 既存クライアントへの影響を避けられます。
  • 主なアプローチ:
    • URI バージョニング: GET /v1/orders
    • クエリパラメーター: GET /orders?version=1
    • HTTP ヘッダー: Accept-Version: v1
AWS でのアプリケーション開発

API デベロッパーポータル

  • Web ポータルを通じて 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...