ルート(経路)は、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 が次のように解析されることがわかります。
- URL のドメイン部分 http://myOrg-prod.apigee.net は、Edge の仮想ホストに対応しています。上記の ProxyEndpoint の定義では、API プロキシは <VirtualHost> タグを使用して default という名前の仮想ホストを参照しています。環境で複数の仮想ホストを定義できます。
仮想ホストは、API プロキシが公開されているドメインおよびポートを定義します。また、仮想ホストは、HTTP プロトコルと暗号化 HTTPS プロトコルのどちらを使用して API プロキシにアクセスするかを定義します。仮想ホストの詳細については、仮想ホストについて(ベータ版)を参照してください。 - URL の 2 番目の部分である /v1/weather は、ProxyEndpoint の <BasePath> 要素によって決まります。2 つの API プロキシのベースパスが同一にならないようにするため、ベースパスは環境内で API プロキシ固有である必要があります。
- 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"/>