ルートについて

ルート(経路)は、ProxyEndpoint から TargetEndpoint へのリクエストのパスを決定します。ルートには、API ProxyEndpoint にアクセスするために使われる URL と、TargetEndpoint で定義されたバックエンド サービスの URL が含まれています。

ルートの概要と、ProxyEndpoint および TargetEndpoint の関係を説明する次の短い動画をご覧ください。

API プロキシ エンドポイントの URL の決定

次の図に示されているリクエストは、アプリから ProxyEndpoint に到着し、バックエンド サービスに転送されます。

Edge で API プロキシを作成した後、プロキシにアクセスするためにアプリで使用されるデフォルト URL は次の形式になります。

http://{org-name}-{env-name}.apigee.net/{base-path}/{resource-path}

https://{org-name}-{env-name}.apigee.net/{base-path}/{resource-path}

ここで

  • {org-name} は組織名です。Edge でアカウントを作成するときに、この名前が作成されます。
  • {env-name} は Edge 環境名です。デフォルトでは、クラウドで作成されるすべての Agipee 組織は、2 つの環境(「test」と「prod」)を使用してプロビジョニングされます。API プロキシのデプロイ時に、いずれか 1 つまたは両方の環境に API プロキシをデプロイできます。
  • {base-path}{resource-path} は、API プロキシの作成時に定義されます。

リクエストが Edge に到着すると、Edge は URL を解析して正しい ProxyEndpoint にリクエストを転送します。たとえば、Edge の API プロキシにアクセスするために次の URL が使用されます。

http://myOrg-prod.apigee.net/v1/weather/forecastrss

上の図の API プロキシの ProxyEndpoint の定義を調べると、Edge でこの URL が次のように解析されることがわかります。

  1. URL のドメイン部分 http://myOrg-prod.apigee.net は、Edge の仮想ホストに対応しています。上記の ProxyEndpoint の定義では、API プロキシは <VirtualHost> タグを使用して default という名前の仮想ホストを参照しています。環境で複数の仮想ホストを定義できます。

    仮想ホストは、API プロキシが公開されているドメインおよびポートを定義します。また、仮想ホストは、HTTP プロトコルと暗号化 HTTPS プロトコルのどちらを使用して API プロキシにアクセスするかを定義します。仮想ホストの詳細については、仮想ホストについて(ベータ版)を参照してください。
  2. URL の 2 番目の部分である /v1/weather は、ProxyEndpoint の <BasePath> 要素によって決まります。2 つの API プロキシのベースパスが同一にならないようにするため、ベースパスは環境内で API プロキシ固有である必要があります。
  3. URL の 3 番目の部分である /forecastrss は、<Flows> タグで定義されている対応する条件フローを使用して API プロキシにより定義されるリソースです。

動画: API プロキシ エンドポイントについて詳しく説明する短い動画をご覧ください。

ターゲット エンドポイントの URL の決定

ProxyEndpoint 定義の <RouteRule> タグは、API プロキシのターゲットを決定します。このタグは、ProxyEndpoint リクエストの PreFlow、条件付きフロー、PostFlow のすべてのポリシーが処理された後に評価されます。

ProxyEndpoint ではターゲットを以下として定義できます。

  • バックエンド サービスへのダイレクト URL。
  • 単一の TargetEndpoint の定義。
  • API プロキシが条件に基づいてターゲット エンドポイントへのリクエストを委任する複数の TargetEndpoint。
  • null ルートまたはターゲット。リクエストがターゲットに転送されないことを意味します。転送ではなく、リクエストのすべての処理とレスポンスの生成が Edge で実行されます。

動画: ターゲット エンドポイントについて詳しく説明する短い動画をご覧ください。

ダイレクト URL

ProxyEndpoint では、指定された TargetEndpoint 構成を一切使用することなく、バックエンド サービスを直接呼び出すことができます。たとえば、次の <RouteRule> は、常に http://api.mycompany.com/myAPI に対する HTTP 呼び出しを実行します。

<RouteRule name="default">
  <URL>http://api.mycompany.com/myAPI</URL>
</RouteRule>

ただし、TargetEndpoint がないため、ProxyEndpoint で定義されたフローにはポリシーのみを追加できます。

単一のターゲット

単一ターゲットの定義では、上の図に示すように、ProxyEndpoint では単一の TargetEndpoint 定義が名前で参照されます。

<RouteRule name="default">
  <TargetEndpoint>default</TargetEndpoint>
</RouteRule>

この API プロキシに対するすべてのリクエストは、同一の TargetEndpoint 定義に転送されます。TargetEndpoint の <URL> タグにより、バックエンド サービスの位置が決まります。上の図では、ターゲット URL は http://weather.yahooapis.com です。

条件付きターゲット

<RouteRule> タグを使用すると、条件に基づいてターゲットにリクエストを転送できます。フロー変数、クエリ パラメータ、HTTP ヘッダー、メッセージ コンテンツ、コンテキスト情報(時刻およびロケールなど)を使用して、ターゲットのエンドポイントを決定できます。たとえば、リクエスト URL に US や UK などの地域を含めることができます。これにより、地域に基づいてリクエストをターゲット エンドポイントにルーティングできます。

次のルートルールでは、リクエストの HTTP ヘッダーが評価されます。HTTP ヘッダー routeTo の値が TargetEndpoint1 である場合、リクエストは TargetEndpoint1 という名前の TargetEndpoint に転送されます。そうでない場合、リクエストは TargetEndpoint2 に転送されます。

<RouteRule name="MyRoute">
  <Condition>request.header.routeTo = "TargetEndpoint1"</Condition>
  <TargetEndpoint>TargetEndpoint1</TargetEndpoint>
</RouteRule>
<RouteRule name="default">
 <TargetEndpoint>TargetEndpoint2</TargetEndpoint>
</RouteRule>

ルートルールが複数ある場合は、1 つのルートルールを「デフォルト」つまり無条件のルートルールとして作成します。ProxyEndpoint ではルールは上から下の順に評価されるので、デフォルトのルートルールが条件付きルートのリストの最後に定義されていることを確認してください。

動画: 条件付きターゲットを使用してターゲット エンドポイントにルーティングする方法を説明する短い動画をご覧ください。

null ルート

null ルートは、リクエスト メッセージを TargetEndpoint に転送する必要のないシナリオに対応しています。これは、JavaScript を使用して外部サービスを呼び出す場合など、必要なすべての処理を ProxyEndpoint で実行する場合に役立ちます。

次の例では、null ルートが定義されています。

<RouteRule name="GoNowhere"/>

詳細