APIルーティング

APIGWは、API単位のルーティングリソースを管理します。すべてのルーティングリソースは、アクションパイプラインを保有し、リクエストとレスポンスのメッセージに様々な加工を行うことができます。また、カスタムスクリプトを埋め込んでマイクロワークフローを駆動させることでステートレスなマッシュアップを実現することもできます。

以下はアクションパイプラインの機能配置図です。


経路選択アルゴリズム

API Gatewayは、リクエストを受信したときにルーティング戦略を計画します。リクエストヘッダと起動パラメータは、次のルーティング戦略を決定します。

Strategy Condition description
Delegate 起動パラメータ--force_delegation_mode=True 上位のAPIGatewayに転送します。
Direct X-Xaas-Direct-Routingが指定されている X-Xaas-Direct-Routingで指定されたURLに転送します。
Static X-Xaas-Static-Routingが指定されている ルートエントリのターゲットエンドポイントをX-Xaas-Static-Routingで指定されたエンドポイントに変換します。
Tunneling X-Xaas-Tunnelingが指定されている カプセル化されたリクエスト本文からヘッダ、パラメータ、本文をデコードして新しいHTTPリクエストを作成し、ルートエントリのターゲットエンドポイントに転送します。
Standard 経路制御拡張ヘッダが含まれていない ルートエントリのターゲットエンドポイントに転送します。
Hierarchical ルーティング未定義で且つ--hierarchical_routing_mode=True 上位のAPIGatewayに転送します。


Tip

リージョナルなサービスのエンドポイントがターゲットの場合、APIルーティングにエンドポイントを固定化できないため、Scenarioなどのプラグインでエンドポイントを選定してX-Xaas-Static-RoutingにセットしてAPI Gatewayに送信することで動的にターゲットを切り替える手法が最適です。ScenarioからのcalloutにX-Xaas-Static-Routing拡張ヘッダを埋め込む方法は、リファレンス>>組込関数のcalloutを参照してください。

Note

  1. Tunnelingを利用する場合、X-Xaas-Tunneling拡張ヘッダにはスーパーAPI鍵を指定する必要があります。

  2. DelegateHierarchicalは、起動パラメータで上位のAPI Gatewayを指定しておく必要があります。

    --superior_apigw_host={host} --superior_apigw_port={port}

Tip

標準ルーティングStandardはVRF機能が適用されます。柔軟なエンドポイントスイッチングは、複数のDevOps環境で役立ちます。
ルーティングプレーンは、GUIを使用していつでも簡単に変更できます。

また、実稼働環境などで誤ってVRF切替が発生しないようにプレーンを固定したい場合は、以下のように起動パラメータで指定してください。
Ex) --plane=prod


アクションパイプライン

APIルーティングはリクエスト、レスポンスに対する様々なアクションを適用できるアクションパイプラインを持ちます。アクションパイプラインで利用できる各機能ブロックを以下に解説しています。

Out of service


API閉塞を制御する機能です。閉塞状態でリクエストを受信した場合に返却する応答はカスタマイズできます。デフォルトでは503 Service Unavailableが返却されます。

Tip

OUSブロックを通過した後、X-Xaas-Schedule-Datetimeがリクエストヘッダで指定されている場合、それはスケジュールサービスにWebフック予約されます。時間形式は%Y-%m-%d%H:%M:%Sです。つまり、APIGWに登録されているすべてのAPIは、絶対時刻を指定する予約可能なAPIになります。予約されたリクエストに対する応答は、202 Acceptedで応答本文には、予約IDが格納されます。

In service time


APIが稼働する時間を制限できる機能です。設定された開始時刻と終了時刻の間のアクセスのみを許可し、アクセスが許可されていない時間帯は、503 Service Unavailableを応答します。応答コードや本文は、Out of service機能にデフォルトのOUS応答を設定することでカスタマイズすることもできます。

Proxy authorization


リクエスト認可を行う機能です。BASIC認証Digest認証Keystone認証、およびQmonus独自認証をサポートしています。

Pop header


指定されたキーに合致するリクエストヘッダを除去する機能です。

Push header


指定されたヘッダをリクエストヘッダに追加する機能です。

Queuing


リクエストをキューイングして非同期化する機能です。

Note

キューの設定パラメータは次のとおりです。

enable: キューイングを有効にするかどうかを指定します。デフォルトはFalseです。

queue_type: キュータイプは、serialparallelの2つのタイプから選択できます。serialでは、1つのワーカーがキューを消費し、一度に1つのタスクをシリアルで処理します。parallelの場合、複数のワーカーがキューを消費し、タスクを並行して処理します。parallelの場合、各ワーカーは起動パラメーター--parallel_queue_bulk_read_sizeで指定された数までタスクをデキューし、それらをまとめて処理します。APIGWが2コア3クラスターおよび--parallel_queue_bulk_read_size=32で実行されている場合、2 * 3 * 32 = 192多重で動作します。

max_residence_time: キュー内の最大滞留時間を秒単位で指定します。この秒数を超えてキューにとどまると、破棄されます。

accept_response: 開発者がキューイング後の応答をカスタマイズしたい場合に、HTTP応答コードと本文を設定できます。

accept_responseを指定しない場合、次のデフォルトの応答が返されます。

type: object
required:
- taskid
- status
- content
properties:
  taskid:
    type: string
    description: The identifier of the queued task.
  status:
    type: string
    description: Task processing status
  content:
    type: object
    properties:
      registration_time:
        description: Entry time to the task queue
        type: string
      max_residence_time:
        description: Maximum residence time
        type: integer
      expire_time:
        description: Expiration time
        type: string
      request:
        type: object
        properties:
          url:
            type: string
          headers:
            type: object
          method:
            type: string
          body:
            type: string
        description: Queued HTTP request content

Tip

デフォルトの応答に含まれるtaskidで実行されたタスクの応答を取得できます。ただし、max_residence_timeを超えるとタスクの応答が消えるので、設定には注意が必要です。

タスクの実行結果は、以下のAPIで取得できます。
GET /queues/{taskid}

GET /queues/{taskid}の応答は、上記のデフォルトの202 Accepted応答と同じスキーマです。
タスクステータス値の意味は次のとおりです。
Waiting: まだ待ち行列にあります
Processing: タスクは処理中です
Processed: タスクが処理されました
Discarded: タスクは破棄されました


参考: キューイングと消費の基本シーケンス図

Target authentication


ターゲットへの認証を代行する機能です。BASIC認証Digest認証Keystone認証OAuth認証AWS-HMAC-V4認証、およびQmonus独自認証をサポートします。

Stub(非推奨)


APIモック応答を作成できる機能です。将来のリリースで削除される予定です。後述するforbidden_processでよりきめ細かいモック作成が可能です。

Body template


テンプレートエンジンを使用して本文をレンダリング結果に書き換える機能です。Scenarioサービスのtemplateプラグインを使用することもできます。

Forbidden process


リクエストとレスポンスを開発者のカスタムスクリプトにフックし、自由にカスタマイズできる機能です。詳細は、APIGWにおけるプログラミングを参照してください。

Body key filter


1ライナーのカスタムスクリプトまたはホワイトリスト、ブラックリストに従って、本文内のキーをフィルタリングできる機能です。

Body mapper


Parametermapperサービスを適用して本体を整形できる機能です。

Convert body style


本文のキースタイルを変換する機能です。snake caseからlower camel caseへの変換または、その逆変換をサポートします。

Body validation schema


jsonschemaによる本文のバリデーション検査を提供する機能です。

Lambda proxy(非推奨)


リクエストをlambdaイベントに変換して発行し、処理結果で応答する機能です。本機能はforbidden_processで代替できるため、将来削除予定です。

Lambda hook(非推奨)


リクエスト/レスポンス時にlambdaイベントを発生させる機能です。本機能はforbidden_processで代替できるため、将来削除予定です。

Error body off


ターゲットからの応答がエラーの場合に、本体を空にする機能です。


APIの認証スコープについて

APIルーティングにはscope属性があり、securelocalpublicの3種類から指定できます。secureモードの場合は、Qmonus認証認可が有効化されます。起動パラメータ--local_scope_auth_modeTrueの場合、localモードにはQmonus認証認可が必要になります。 Falseおよびpublicモードの場合、Qmonus認証認可は無効化されます。

スコープ Qmonus認証認可
secure enable
local enable if options.local_scope_auth_mode==True else disable
public disable


Caution

X-Xaas-Static-Routing拡張ヘッダはsecureスコープでのみ有効です。