T-CREATOR

Nginx API ゲートウェイ設計:auth_request/サーキットブレーカ/レート制限の組み合わせ

Nginx API ゲートウェイ設計:auth_request/サーキットブレーカ/レート制限の組み合わせ

API ゲートウェイの設計において、セキュリティとパフォーマンスのバランスを取ることは非常に重要です。特に Nginx を利用した API ゲートウェイでは、認証、サーキットブレーカ、レート制限という 3 つの要素を適切に組み合わせることで、堅牢で効率的なシステムを構築できます。

本記事では、Nginx の auth_request、サーキットブレーカ、レート制限を組み合わせた実践的な API ゲートウェイ設計を解説していきます。初心者の方でも実装できるよう、段階的に丁寧に説明していきますので、ぜひ最後までお付き合いください。

背景

API ゲートウェイの役割

API ゲートウェイは、クライアントとバックエンドサービスの間に位置し、リクエストの中継やセキュリティ、トラフィック管理などを一手に担う重要なコンポーネントです。

複数のマイクロサービスが存在する環境では、各サービスへのアクセスを一元管理し、認証・認可、リクエスト制限、障害対応などを統一的に処理することで、システム全体の品質と保守性を向上させられます。

以下の図で、API ゲートウェイの基本的な位置づけとデータフローを確認しましょう。

mermaidflowchart LR
  client["クライアント<br/>(ブラウザ/アプリ)"]
  gateway["API ゲートウェイ<br/>(Nginx)"]
  auth["認証サービス"]
  service1["サービス A"]
  service2["サービス B"]
  service3["サービス C"]

  client -->|リクエスト| gateway
  gateway -->|認証確認| auth
  gateway -->|転送| service1
  gateway -->|転送| service2
  gateway -->|転送| service3
  gateway -->|レスポンス| client

この図から分かるように、API ゲートウェイはすべてのリクエストを受け取り、必要な処理を行った上で適切なバックエンドサービスに転送します。

Nginx を API ゲートウェイとして利用する利点

Nginx は高いパフォーマンスと柔軟な設定が特徴の Web サーバー/リバースプロキシです。

API ゲートウェイとして利用する際には、以下のような利点があります。

#項目説明
1高性能非同期イベント駆動アーキテクチャにより、大量の同時接続を効率的に処理できます
2柔軟性モジュールを組み合わせることで、認証、レート制限、ロードバランシングなど多様な機能を実現可能です
3軽量メモリ使用量が少なく、リソース効率が高いため、コスト削減にもつながります
4豊富な実績世界中で広く利用されており、コミュニティも活発で情報が豊富です
5モジュール拡張サードパーティモジュールにより、標準機能にない機能も追加できます

課題

API ゲートウェイで対処すべき課題

API ゲートウェイを設計する際、以下のような課題に直面します。

認証・認可の一元管理

各マイクロサービスで個別に認証を実装すると、コードの重複が発生し、セキュリティポリシーの統一が困難になります。また、認証ロジックの変更が必要になった場合、すべてのサービスを修正しなければなりません。

サービス障害の波及防止

バックエンドサービスの 1 つが障害を起こした場合、そのサービスへのリクエストがタイムアウトするまで待機することになり、API ゲートウェイ全体のパフォーマンスが低下してしまいます。

トラフィックの過負荷対策

特定のクライアントからの大量リクエストや、DDoS 攻撃などにより、バックエンドサービスが過負荷状態になるリスクがあります。

以下の図で、これらの課題がどのように発生するかを確認しましょう。

mermaidflowchart TB
  subgraph problems["課題の発生パターン"]
    direction TB

    problem1["課題 1:認証の分散<br/>各サービスで個別実装"]
    problem2["課題 2:障害の連鎖<br/>1 つの障害が全体に影響"]
    problem3["課題 3:過負荷<br/>無制限なリクエスト"]
  end

  subgraph impacts["システムへの影響"]
    direction TB

    impact1["保守性の低下<br/>セキュリティリスク"]
    impact2["可用性の低下<br/>パフォーマンス劣化"]
    impact3["サービス停止<br/>リソース枯渇"]
  end

  problem1 -.->|導く| impact1
  problem2 -.->|導く| impact2
  problem3 -.->|導く| impact3

これらの課題を解決するために、次のセクションで説明する 3 つの仕組みを組み合わせていきます。

解決策

auth_request による認証の一元化

Nginx の auth_request ディレクティブを使用すると、リクエストを処理する前に外部の認証サービスに問い合わせを行い、認証・認可を一元的に管理できます。

この仕組みにより、バックエンドサービス側では認証ロジックを実装する必要がなくなり、認証ポリシーの変更も API ゲートウェイ側のみで対応可能になります。

サーキットブレーカによる障害の隔離

サーキットブレーカパターンは、障害が発生しているサービスへのリクエストを一時的に遮断し、システム全体への影響を最小限に抑える仕組みです。

Nginx では、proxy_next_upstreammax_failsfail_timeout などのディレクティブを組み合わせることで、サーキットブレーカの動作を実現できます。

レート制限によるトラフィック制御

limit_req モジュールを使用することで、クライアント単位やエンドポイント単位でリクエスト数を制限し、過負荷を防ぎます。

これにより、正常なユーザーへの影響を最小限に抑えつつ、悪意のあるトラフィックや想定外の負荷からシステムを保護できます。

以下の図で、3 つの解決策がどのように連携するかを確認しましょう。

mermaidflowchart TB
  request["クライアント<br/>リクエスト"]

  subgraph nginx_gateway["Nginx API ゲートウェイ"]
    direction TB

    ratelimit["1. レート制限<br/>(limit_req)"]
    authreq["2. 認証確認<br/>(auth_request)"]
    circuit["3. サーキットブレーカ<br/>(max_fails)"]
  end

  authservice["認証サービス"]
  backend["バックエンド<br/>サービス"]
  response["レスポンス"]

  request --> ratelimit
  ratelimit -->|制限内| authreq
  ratelimit -->|制限超過| reject1["429 Too Many Requests"]
  authreq -->|確認| authservice
  authservice -->|認証成功| circuit
  authservice -->|認証失敗| reject2["401 Unauthorized"]
  circuit -->|正常| backend
  circuit -->|障害検知| reject3["503 Service Unavailable"]
  backend --> response

この図が示すように、リクエストは段階的にチェックされ、各層で適切な制御が行われます。

図で理解できる要点

  • リクエストは「レート制限 → 認証 → サーキットブレーカ」の順で処理される
  • 各段階で問題があれば、適切なステータスコードでリクエストを拒否できる
  • バックエンドサービスには、すべてのチェックを通過した正当なリクエストのみが届く

具体例

Docker 環境の構築

まずは、実際に動作する環境を Docker で構築しましょう。

以下は、Docker Compose を使った構成例です。API ゲートウェイ(Nginx)、認証サービス、バックエンドサービスの 3 つのコンテナを起動します。

yaml# docker-compose.yml
version: '3.8'

services:
  # API ゲートウェイ(Nginx)
  nginx:
    image: nginx:alpine
    ports:
      - '80:80'
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf:ro
      - ./conf.d:/etc/nginx/conf.d:ro
    depends_on:
      - auth-service
      - backend-service
    networks:
      - api-network

  # 認証サービス
  auth-service:
    image: node:18-alpine
    working_dir: /app
    volumes:
      - ./auth-service:/app
    command: node server.js
    networks:
      - api-network
    environment:
      - PORT=3001

  # バックエンドサービス
  backend-service:
    image: node:18-alpine
    working_dir: /app
    volumes:
      - ./backend-service:/app
    command: node server.js
    networks:
      - api-network
    environment:
      - PORT=3002

networks:
  api-network:
    driver: bridge

このファイルでは、3 つのサービスを api-network という共通のネットワークで接続しています。Nginx はポート 80 で外部からのリクエストを受け付けます。

認証サービスの実装

次に、認証を担当するシンプルな Node.js サービスを作成しましょう。

このサービスは、リクエストヘッダーに含まれる API キーを検証し、有効な場合は 200、無効な場合は 401 を返します。

javascript// auth-service/server.js

// 必要なモジュールをインポート
const http = require('http');

// 有効な API キーのリスト(実際の運用では DB や環境変数から取得)
const VALID_API_KEYS = new Set([
  'key-12345-valid',
  'key-67890-valid',
  'key-abcde-valid',
]);
javascript// リクエストハンドラーの定義
const requestHandler = (req, res) => {
  // リクエスト情報をログ出力
  console.log(`[Auth] ${req.method} ${req.url}`);
  console.log(`[Auth] Headers:`, req.headers);

  // Authorization ヘッダーから API キーを取得
  const apiKey = req.headers['x-api-key'];

  if (!apiKey) {
    console.log('[Auth] API キーが見つかりません');
    res.writeHead(401, { 'Content-Type': 'application/json' });
    res.end(JSON.stringify({ error: 'API キーが必要です' }));
    return;
  }
javascript  // API キーの検証
  if (VALID_API_KEYS.has(apiKey)) {
    console.log('[Auth] 認証成功');
    // 認証成功時は、ユーザー情報をヘッダーに追加して返す
    res.writeHead(200, {
      'Content-Type': 'application/json',
      'X-User-Id': 'user-123',
      'X-User-Role': 'admin'
    });
    res.end(JSON.stringify({ status: 'authorized' }));
  } else {
    console.log('[Auth] 認証失敗:無効な API キー');
    res.writeHead(401, { 'Content-Type': 'application/json' });
    res.end(JSON.stringify({ error: '無効な API キーです' }));
  }
};
javascript// サーバーの起動
const PORT = process.env.PORT || 3001;
const server = http.createServer(requestHandler);

server.listen(PORT, () => {
  console.log(
    `認証サービスがポート ${PORT} で起動しました`
  );
});

このコードでは、x-api-key ヘッダーの値を検証し、有効な場合はユーザー情報を含むヘッダーも返しています。このユーザー情報は、Nginx を経由してバックエンドサービスに渡されます。

バックエンドサービスの実装

バックエンドサービスは、実際のビジネスロジックを処理するサービスです。

ここでは、簡単な API エンドポイントを作成し、認証情報を受け取って処理する例を示します。

javascript// backend-service/server.js

// 必要なモジュールをインポート
const http = require('http');

// リクエストカウンター(障害シミュレーション用)
let requestCount = 0;
javascript// リクエストハンドラーの定義
const requestHandler = (req, res) => {
  requestCount++;

  console.log(`[Backend] ${req.method} ${req.url}`);
  console.log(`[Backend] リクエスト数: ${requestCount}`);

  // Nginx から渡されたユーザー情報を取得
  const userId = req.headers['x-user-id'];
  const userRole = req.headers['x-user-role'];

  console.log(`[Backend] User ID: ${userId}, Role: ${userRole}`);
javascript// 障害シミュレーション(10 回に 1 回は遅延を発生させる)
if (requestCount % 10 === 0) {
  console.log('[Backend] 遅延をシミュレート中...');
  setTimeout(() => {
    res.writeHead(200, {
      'Content-Type': 'application/json',
    });
    res.end(
      JSON.stringify({
        message: 'データ取得成功(遅延あり)',
        userId: userId,
        userRole: userRole,
        timestamp: new Date().toISOString(),
      })
    );
  }, 5000); // 5 秒遅延
  return;
}
javascript  // 通常のレスポンス
  res.writeHead(200, { 'Content-Type': 'application/json' });
  res.end(JSON.stringify({
    message: 'データ取得成功',
    userId: userId,
    userRole: userRole,
    data: [
      { id: 1, name: '商品 A', price: 1000 },
      { id: 2, name: '商品 B', price: 2000 },
      { id: 3, name: '商品 C', price: 3000 }
    ],
    timestamp: new Date().toISOString()
  }));
};
javascript// サーバーの起動
const PORT = process.env.PORT || 3002;
const server = http.createServer(requestHandler);

server.listen(PORT, () => {
  console.log(
    `バックエンドサービスがポート ${PORT} で起動しました`
  );
});

このサービスでは、10 回に 1 回、意図的に 5 秒の遅延を発生させています。これにより、サーキットブレーカの動作をテストできます。

Nginx 設定ファイルの作成

ここからが本題です。Nginx の設定ファイルで、レート制限、認証、サーキットブレーカを組み合わせていきます。

まず、基本的な設定とレート制限のゾーン定義から始めましょう。

nginx# nginx.conf

# ワーカープロセスの数(CPU コア数に合わせる)
worker_processes auto;

events {
    # 1 つのワーカーが処理できる最大接続数
    worker_connections 1024;
}

http {
    # ログフォーマットの定義
    log_format main '$remote_addr - $remote_user [$time_local] "$request" '
                    '$status $body_bytes_sent "$http_referer" '
                    '"$http_user_agent" "$http_x_forwarded_for"';

    access_log /var/log/nginx/access.log main;
    error_log /var/log/nginx/error.log warn;
nginx    # レート制限のゾーン定義
    # クライアント IP アドレスごとに、10MB のメモリを使用して状態を保存
    limit_req_zone $binary_remote_addr zone=api_limit:10m rate=10r/s;

    # バースト制限用のゾーン(より厳しい制限)
    limit_req_zone $binary_remote_addr zone=api_limit_burst:10m rate=2r/s;

limit_req_zone では、IP アドレス($binary_remote_addr)をキーとして、秒間 10 リクエストまでを許可するゾーンを定義しています。

次に、アップストリームサーバー(バックエンドサービス)の設定を行います。ここでサーキットブレーカの設定も含めます。

nginx    # アップストリームサーバーの定義
    upstream backend {
        # サーキットブレーカの設定
        # 30 秒以内に 3 回失敗したら、30 秒間そのサーバーを使用しない
        server backend-service:3002 max_fails=3 fail_timeout=30s;

        # 複数のバックエンドがある場合は追加可能
        # server backend-service-2:3002 max_fails=3 fail_timeout=30s;

        # キープアライブ接続を有効化(パフォーマンス向上)
        keepalive 32;
    }

max_fails=3 は「3 回連続で失敗したら」、fail_timeout=30s は「30 秒間そのサーバーを使用しない」という設定です。

続いて、仮想サーバーの設定を行います。

nginx    # 仮想サーバーの定義
    server {
        listen 80;
        server_name localhost;

        # 共通のプロキシ設定
        proxy_http_version 1.1;
        proxy_set_header Connection "";
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
nginx        # サーキットブレーカのタイムアウト設定
        # バックエンドからの応答を 10 秒待つ
        proxy_connect_timeout 10s;
        proxy_send_timeout 10s;
        proxy_read_timeout 10s;

        # エラー時の動作設定
        # タイムアウトやエラー時は次のサーバーを試す
        proxy_next_upstream error timeout http_502 http_503 http_504;
        proxy_next_upstream_tries 2;
        proxy_next_upstream_timeout 20s;

これらの設定により、バックエンドが応答しない場合は 10 秒でタイムアウトし、次のサーバーを試すか、エラーを返します。

次に、内部の認証エンドポイントを定義します。

nginx        # 内部の認証エンドポイント
        # external からのアクセスは不可
        location = /auth {
            internal;

            # 認証サービスへプロキシ
            proxy_pass http://auth-service:3001/verify;
            proxy_pass_request_body off;
            proxy_set_header Content-Length "";

            # 元のリクエストの API キーを転送
            proxy_set_header X-Api-Key $http_x_api_key;
            proxy_set_header X-Original-URI $request_uri;
            proxy_set_header X-Original-Method $request_method;
        }

internal ディレクティブにより、このエンドポイントは外部から直接アクセスできず、Nginx 内部からのみ呼び出せるようになります。

いよいよ、実際の API エンドポイントの設定です。ここで 3 つの仕組みをすべて組み合わせます。

nginx        # API エンドポイント
        location /api/ {
            # ステップ 1: レート制限の適用
            # 秒間 10 リクエストまで、バーストで 20 リクエストまで許可
            limit_req zone=api_limit burst=20 nodelay;

            # レート制限超過時のステータスコード
            limit_req_status 429;
nginx            # ステップ 2: 認証の実行
            # /auth エンドポイントで認証を確認
            auth_request /auth;

            # 認証サービスから返されたヘッダーをバックエンドに転送
            auth_request_set $user_id $upstream_http_x_user_id;
            auth_request_set $user_role $upstream_http_x_user_role;
            proxy_set_header X-User-Id $user_id;
            proxy_set_header X-User-Role $user_role;

auth_request ​/​auth により、リクエストを処理する前に ​/​auth エンドポイントで認証を確認します。認証が成功(200)した場合のみ、後続の処理が実行されます。

nginx            # ステップ 3: バックエンドへプロキシ(サーキットブレーカ適用済み)
            proxy_pass http://backend;

            # エラーハンドリング
            proxy_intercept_errors on;
        }

このように、1 つのロケーションブロック内で 3 つの仕組みが順番に適用されます。

最後に、エラーページの設定を追加しましょう。

nginx        # エラーページのカスタマイズ
        error_page 401 /errors/401.json;
        error_page 429 /errors/429.json;
        error_page 502 503 504 /errors/50x.json;

        location /errors/ {
            internal;
            default_type application/json;
        }
    }
}

エラーが発生した場合、適切な JSON レスポンスを返すようにしています。

エラーレスポンスファイルの作成

エラー時に返す JSON ファイルも用意しましょう。

json# conf.d/errors/401.json
{
  "error": {
    "code": 401,
    "message": "認証に失敗しました",
    "details": "有効な API キーをリクエストヘッダー(X-Api-Key)に含めてください"
  }
}
json# conf.d/errors/429.json
{
  "error": {
    "code": 429,
    "message": "リクエスト制限を超過しました",
    "details": "しばらく時間をおいてから再度お試しください",
    "retry_after": 60
  }
}
json# conf.d/errors/50x.json
{
  "error": {
    "code": 503,
    "message": "サービスが一時的に利用できません",
    "details": "バックエンドサービスに接続できませんでした"
  }
}

これらのファイルにより、エラー時にもユーザーフレンドリーなメッセージを返せます。

動作確認とテスト

それでは、実際に動作を確認してみましょう。

まず、Docker 環境を起動します。

bash# Docker コンテナの起動
yarn docker-compose up -d

# ログの確認
yarn docker-compose logs -f

次に、正常なリクエストを送信してみます。

bash# 正常なリクエスト(有効な API キー)
curl -H "X-Api-Key: key-12345-valid" http://localhost/api/products

# 期待される結果: 200 OK と商品データ

認証エラーのテストです。

bash# 認証エラーのテスト(API キーなし)
curl -i http://localhost/api/products

# 期待される結果: 401 Unauthorized

# 認証エラーのテスト(無効な API キー)
curl -i -H "X-Api-Key: invalid-key" http://localhost/api/products

# 期待される結果: 401 Unauthorized

レート制限のテストを行います。

bash# レート制限のテスト(短時間に大量リクエスト)
for i in {1..30}; do
  curl -H "X-Api-Key: key-12345-valid" http://localhost/api/products
  echo "Request $i"
done

# 期待される結果: 最初の数件は成功、その後 429 Too Many Requests

サーキットブレーカのテストは、バックエンドサービスが遅延を起こすまでリクエストを繰り返します。

bash# サーキットブレーカのテスト
# 10 回に 1 回遅延が発生するため、複数回リクエストを送る
for i in {1..15}; do
  echo "Request $i"
  time curl -H "X-Api-Key: key-12345-valid" http://localhost/api/products
  sleep 1
done

# 期待される動作:
# - 通常は即座にレスポンス
# - 遅延発生時(10 秒タイムアウト)後、503 が返る
# - 連続で失敗すると、サーキットブレーカが作動して即座に 503 を返す

以下の図で、リクエストがどのように処理されるかの全体フローを確認しましょう。

mermaidsequenceDiagram
    participant C as クライアント
    participant N as Nginx
    participant A as 認証サービス
    participant B as バックエンド

    C->>N: GET /api/products<br/>X-Api-Key: key-12345

    Note over N: 1. レート制限チェック
    alt 制限超過
        N-->>C: 429 Too Many Requests
    end

    Note over N: 2. 認証確認
    N->>A: GET /auth<br/>X-Api-Key: key-12345

    alt 認証失敗
        A-->>N: 401 Unauthorized
        N-->>C: 401 Unauthorized
    else 認証成功
        A-->>N: 200 OK<br/>X-User-Id: user-123

        Note over N: 3. サーキットブレーカ確認
        alt サーキット OPEN
            N-->>C: 503 Service Unavailable
        else サーキット CLOSED
            N->>B: GET /api/products<br/>X-User-Id: user-123

            alt タイムアウト/エラー
                B-->>N: timeout / error
                Note over N: max_fails カウント増加
                N-->>C: 503 Service Unavailable
            else 正常
                B-->>N: 200 OK + data
                N-->>C: 200 OK + data
            end
        end
    end

図で理解できる要点

  • リクエストは「レート制限 → 認証 → サーキットブレーカ → バックエンド」の順で処理される
  • 各段階でエラーが発生すると、そこで処理が中断され、適切なエラーレスポンスが返される
  • サーキットブレーカが OPEN 状態の場合、バックエンドへのリクエストは行われず即座にエラーが返る

監視とロギング

本番環境では、これらの仕組みが正しく機能しているかを監視することが重要です。

Nginx のログを活用して、レート制限や認証エラー、サーキットブレーカの動作を追跡しましょう。

nginx# カスタムログフォーマットの定義
log_format detailed '$remote_addr - $remote_user [$time_local] '
                    '"$request" $status $body_bytes_sent '
                    '"$http_referer" "$http_user_agent" '
                    'rt=$request_time uct="$upstream_connect_time" '
                    'uht="$upstream_header_time" urt="$upstream_response_time" '
                    'limit_req_status=$limit_req_status '
                    'upstream_addr=$upstream_addr '
                    'upstream_status=$upstream_status';

access_log /var/log/nginx/api_access.log detailed;

このログフォーマットでは、以下の情報を記録します。

#項目説明
1request_timeリクエスト全体の処理時間
2upstream_connect_timeバックエンドへの接続時間
3upstream_response_timeバックエンドからのレスポンス時間
4limit_req_statusレート制限の状態(PASSED, DELAYED, REJECTED など)
5upstream_addr実際にリクエストを処理したバックエンドのアドレス
6upstream_statusバックエンドが返したステータスコード

ログを分析することで、どのエンドポイントでレート制限が頻繁に発生しているか、サーキットブレーカがどの程度作動しているかを把握できます。

パフォーマンスチューニング

実際の運用では、システムの特性に応じて各パラメータをチューニングする必要があります。

レート制限の調整

トラフィックパターンに応じて、レート制限の値を調整しましょう。

nginx# 通常の API エンドポイント(秒間 10 リクエスト)
limit_req_zone $binary_remote_addr zone=api_standard:10m rate=10r/s;

# 負荷の高いエンドポイント(秒間 5 リクエスト)
limit_req_zone $binary_remote_addr zone=api_heavy:10m rate=5r/s;

# 認証エンドポイント(秒間 20 リクエスト)
limit_req_zone $binary_remote_addr zone=api_auth:10m rate=20r/s;

エンドポイントごとに異なるレート制限を適用することで、より細かい制御が可能になります。

サーキットブレーカのパラメータ調整

バックエンドサービスの特性に応じて、サーキットブレーカの感度を調整します。

nginxupstream backend_stable {
    # 安定したサービス: 5 回失敗で 1 分間遮断
    server backend-1:3002 max_fails=5 fail_timeout=60s;
}

upstream backend_unstable {
    # 不安定なサービス: 2 回失敗で 10 秒間遮断(早期発見)
    server backend-2:3003 max_fails=2 fail_timeout=10s;
}

応答が遅いサービスには短いタイムアウトを、安定したサービスには長めのタイムアウトを設定することで、最適なバランスを見つけられます。

まとめ

本記事では、Nginx を API ゲートウェイとして活用し、auth_request、サーキットブレーカ、レート制限という 3 つの重要な仕組みを組み合わせた実践的な設計を解説しました。

これらの仕組みを組み合わせることで、以下のメリットが得られます。

#メリット詳細
1セキュリティの向上認証を一元管理し、不正なリクエストを確実にブロックできます
2可用性の確保サーキットブレーカにより、障害の影響を最小限に抑えられます
3パフォーマンスの安定化レート制限により、過負荷を防ぎ、正常なユーザーへのサービスを維持できます
4保守性の向上API ゲートウェイで一元管理することで、変更が容易になります
5運用コストの削減Nginx の高いパフォーマンスにより、少ないリソースで大量のリクエストを処理できます

実際の運用では、ログの分析やモニタリングを行いながら、各パラメータを継続的にチューニングしていくことが重要です。特に、レート制限の閾値やサーキットブレーカの感度は、トラフィックパターンやバックエンドサービスの特性に応じて調整が必要でしょう。

今回紹介した設計パターンは、マイクロサービスアーキテクチャにおける API ゲートウェイの基本的な構成として、多くの場面で活用できます。ぜひ、ご自身のプロジェクトに合わせてカスタマイズしてみてください。

関連リンク