リソース ファイル

Apigee Edge で定義される多くのポリシータイプは、リソースに依存しています。リソースとは、API プロキシへの接続時に、ポリシーで実行すべきコードまたは構成を実装するファイルです。JavaScript や JavaCallout で見られるように、ポリシーが単にいくつかのコードを実行すべき接続ポイントを API プロキシ内で定義するだけのものである場合があります。JavaScript または JavaCallout ポリシーは、リソースへのポインタです。

こうしたリソースは、組織内の次の 3 種類の場所に格納できます。

  • API プロキシ リビジョン: API プロキシに格納すると、リソースは、そのリソースを含む API プロキシのリビジョンでのみ使用可能になります。たとえば、バージョン 1 の API プロキシに JavaScript リソースを格納し、バージョン 2 のプロキシにある Python を使用するように実装を変更したとします。この場合、バージョン 1 は JavaScript リソースにのみアクセスでき、バージョン 2 は Python リソースにのみアクセスできます。
  • 環境: 環境(たとえば、テスト環境または本番環境)に格納されると、リソースは同じ環境にデプロイされたすべての API プロキシで使用可能になります。
  • 組織: 組織に格納されると、リソースはすべての環境にデプロイされたすべての API プロキシで使用可能になります。

このトピックのサンプル API 呼び出しは cURL を使用します。また SmartDocs Management API 参照トピックを使用して同じ呼び出しを作成できます。

リソースタイプ

リソース リポジトリは、以下のリソースタイプをサポートします。

  • jsc: コンパイルされた JavaScript。JavaScript タイプのポリシーから参照されます。
  • java: JAR ファイル内の Java クラス。JavaCallout タイプのポリシーから参照されます。
    (Apigee Edge プランのみで使用可能。Edge の料金と機能をご覧ください。)
  • py: Python スクリプト。Python タイプのポリシーから参照されます。リソースは「pure Python」(Python 言語のみ)で実装する必要があります。
    (Apigee Edge プランのみで使用可能。Edge の料金と機能をご覧ください。)
  • node: Node.js ファイル。主要な Node.js ファイル、関連するソースファイル、モジュール依存関係が含まれます。
  • wsdl: WSDL ファイル。MessageValidation タイプのポリシーから参照されます。
  • xsd: XML スキーマ。MessageValidation タイプのポリシーから参照されます。
  • xsl: XSLT 変換。XSL タイプのポリシーから参照されます。
  • hosted: ホスト型ターゲットにデプロイする Node.js ファイル。Node.js を Edge バックエンド ターゲット アプリケーションとしてデプロイできます。

リソース ファイル API に記述されているように、リポジトリは以下の URI で使用可能です。

    /organizations/{org_name}/resourcefiles
    /organizations/{org_name}/environments/{environment_name}/resourcefiles
    /organizations/{org_name}/apis/{api_name}/revisions/{revision_number}/resources
    

たとえば、組織全体で使用可能なすべての JavaScript ファイルは、以下の場所に格納されています。

    /organizations/{org_name}/resourcefiles/jsc
    

/organizations コレクションに格納された JavaScript は、すべての環境で実行しているすべての API プロキシで使用可能です。

コレクションで GET を呼び出すことで、使用可能なリソースをすべてリストできます。

    $ curl https://api.enterprise.apigee.com/v1/organizations/{org_name}/resourcefiles/{resource_type} -u email
    

以下のリクエストは、組織レベルのすべての JavaScript リソースをリストします。

    $ curl https://api.enterprise.apigee.com/v1/organizations/myorg/resourcefiles/jsc -u email
    

以下のリクエストは、prod という環境で環境レベルのすべての JavaScript リソースをリストします。

    $ curl https://api.enterprise.apigee.com/v1/organizations/myorg/environments/prod/resourcefiles/jsc  -u email
    

以下のリクエストは、API プロキシ リビジョン(最も詳細なレベル)のすべての JavaScript リソースをリストします。

    $ curl https://api.enterprise.apigee.com/v1/organizations/myorg/apis/weatherapi/revisions/6/resourcefiles/jsc  -u email
    

各リクエストは、リソース名のリストを返します。

レスポンスの例:

    {
      "resourceFile" : [ {
        "name" : "genvars-pw.js",
        "type" : "jsc"
      }, {
        "name" : "genvars-refresh.js",
        "type" : "jsc"
      }, {
        "name" : "getvars.js",
        "type" : "jsc"
      } ]
    }
    

リソース リポジトリへの投入

JavaScript の単純なスニペットがあり、これを組織全体の API プロキシで使用できるようにする必要があると仮定します。以下のサンプル JavaScript は、HTTP リクエストパスを proxy.basepath 変数の値に設定します。これはリポジトリに投入する必要があるリソースの一例にすぎません。

    request.headers["RequestPath"] = context.getVariable("proxy.basepath");
    

リソースを作成するには、POST メソッドを呼び出して、リソース ファイルの本文を送信し、リソースの nametype をクエリ パラメータとして指定します。

組織のあらゆる環境で実行している API プロキシが JavaScript を使用できるようにするには、次のコマンドを実行します。

    $ curl -X POST -H "Content-type:application/octet-stream" -d \
    'request.headers["RequestPath"] = context.getVariable("proxy.basepath");' \
    https://api.enterprise.apigee.com/v1/organizations/myorg/resourcefiles?name=pathSetter.js&type=jsc \
    -u email
    

レスポンスの例:

    {
      "name" : "pathSetter.js",
      "type" : "jsc"
    }
    

また、リソースをローカルマシンからファイルとして次のようにアップロードすることもできます。環境および組織をスコープとする JavaScript ファイルを JavaScript ポリシーからアクセス可能にするには、cURL でバイナリ アップロードに -F を使用することが重要です。

    $ curl -X POST -H "Content-type:multipart/form-data" -F file=@pathSetter.js \
    https://api.enterprise.apigee.com/v1/organizations/myorg/resourcefiles?name=pathSetter.js&type=jsc \
    -u email
    

pathSetter.js という名前の JavaScript リソースを、組織内のあらゆる環境で実行中の JavaScript タイプのポリシーから参照できるようになりました。

たとえば、JavaScript をリクエスト PostFlow に接続するには、PathSetterPolicy.xml という名前でファイル pathSetter.js を参照するポリシーを作成します。

    <Javascript name='PathSetterPolicy' timeLimit='200'>
        <ResourceURL>jsc://pathSetter.js</ResourceURL>
    </Javascript>
    

Endpoint 構成でこのポリシーを参照します。

    <PostFlow>
      <Request>
        <Step><Name>PathSetterPolicy</Name></Step>
      </Request>
    <PostFlow>
    

Node.js リソース ガイドライン

API プロキシで Node.js スクリプトを参照する場合、API プロキシの TargetEndpoint 構成で <ResourceURL> 要素を使用します。詳しくは、既存の API プロキシへの Node.js の追加をご覧ください。次に例を示します。

    <ScriptTarget>
        <ResourceURL>node://hello-world.js</ResourceURL>
    </ScriptTarget>
    

この Node.js スクリプトおよびすべてのサポート モジュールは、API プロキシ リビジョンのスコープ(プロキシ バンドルの /resources/node ディレクトリ)に配置されている必要があります。管理 UI の API プロキシ エディタでは、Node.js リソースを [Scripts] セクションに追加することでこの手順を実行します。API プロキシ リビジョンのスコープにリソースを格納するには、Management API(importupdate)を使用して格納します。

Java リソースの追加

-T--data-binary-F オプション(-d オプションではない)など、複数のオプションを cURL で使用することで、コンパイルした Java リソースを JAR ファイルとして追加できます。次に例を示します。

    curl -v -u email -H "Content-Type: application/octet-stream" \
    -X POST --data-binary @{jar_file} \
    "http://{mgmt_server}:{port}/v1/organizations/{org}/resourcefiles?name={jar_file}&type=java"
    
    curl -v -u email -H "Content-Type: application/octet-stream" \
    -X POST -T "{jar_file}" \
    "http://{mgmt_server}:{port}/v1/organizations/{org}/resourcefiles?name={jar_file}&type=java"
    
    curl -v -u email -H "Content-Type: multipart/form-data" \
    -X POST -F "file=@{jar_file}" \
    "http://{mgmt_server}:{port}/v1/organizations/{org}/resourcefiles?name={jar_file}&type=java"
    

関連情報

リソース ファイルの更新と削除

API プロキシ リビジョンのスコープにあるリソースの場合、管理 UI のプロキシ エディタで、これらを変更および削除できます。

API プロキシ スコープと同様に、環境および組織のスコープで API リソースの更新や削除を行う場合は、以下を参照してください。

リソース名の解決

Apigee Edge でのリソース名解決は、最も詳細なスコープから最も広いスコープへの順で行われます。リソース名は、API プロキシレベルから、環境レベル、組織レベルまで「チェーンの上位」に向かって解決されます。

組織と環境という 2 つの異なるリポジトリで、同じリソースに値を入力したと仮定しましょう。

    $ curl -X POST -H "Content-type:application/octet-stream" -d \
    'request.headers["RequestPath"] = context.getVariable("proxy.basepath");' \
    https://api.enterprise.apigee.com/v1/organizations/myorg/resourcefiles?name=pathSetter.js&type=jsc \
    -u email
    
    $ curl -X POST -H "Content-type:application/octet-stream" -d \
    'request.headers["RequestPath"] = context.getVariable("proxy.basepath");' \
    https://api.enterprise.apigee.com/v1/organizations/myorg/environments/prod/resourcefiles?name=pathSetter.js&type=jsc \
    -u email
    

同じリソースが、組織レベルと環境レベルの 2 つのリポジトリで使用可能であるというシナリオを考えます。

    https://api.enterprise.apigee.com/v1/organizations/myorg/resourcefiles/jsc/pathSetter.js
    https://api.enterprise.apigee.com/v1/organizations/myorg/environments/prod/resourcefiles/jsc/pathSetter.js
    

ここで API プロキシが以下のポリシーで構成されていると想像してください。

    <Javascript name='PathSetterPolicy' timeLimit='200'>
        <ResourceURL>jsc://pathSetter.js</ResourceURL>
    </Javascript>
    

ポリシー参照は、明示的に特定のリポジトリに対して行うことはできません。ポリシー内のリソース名と一致する名前を持つリソースのうち、最も詳細なスコープを持つものが使用されます。

したがって、API プロキシが prod 環境にデプロイされる場合、ポリシーは環境スコープの pathSetter.js リソースに解決されます。

    /organizations/myorg/environment/prod/resourcefiles/jsc/pathSetter.js
    
test 環境に展開される場合、ポリシーは組織範囲のリソースに解決されます。環境範囲のリソースは、prod 環境に含まれるからです(test 環境ではなく)。
    /organizations/myorg/resourcefiles/jsc/pathSetter.js
    

リソースの取得

GET メソッドを呼び出してリソースの本文を表示できます。

    $ curl -X GET -H "Accept: application/json"
    https://api.enterprise.apigee.com/v1/organizations/myorg/resourcefiles/jsc/pathSetter.js" \
    -u email
    

レスポンスの例(リソース ファイルの内容が表示されます):

    request.headers["RequestPath"] = context.getVariable("proxy.basepath");
    

リソース ファイルのリストと取得について詳しくは、Management API でリソース ファイル API をご覧ください。