Send Docs Feedback

Note: Most user interface tasks can be performed in Edge Classic or the New Edge experience. For an overview, getting started topics, and release notes specific to the New Edge experience, see the docs.

リソースファイル

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

管理 UI では、API プロキシに範囲が設定されたリソースは、「Navigation」ペインの「Scripts」セクションにリストされます。

これらのリソースは、組織 (organization) で次の 3 種類の場所に格納できます。

  • API プロキシ: API プロキシに格納されると、リソースはその API プロキシのみで使用可能になります。
  • 環境: 環境 (例えば、テストまたは実稼動) に格納されると、リソースは同じ環境に展開されたすべての API プロキシで使用可能になります。
  • 組織: 組織に格納されると、リソースはすべての環境 (environment) に展開されたすべての API プロキシで使用可能になります。

プロキシレベルでのリソースの格納に加えて、API サービスは、組織レベル、環境レベルでもこれらのリソースにリポジトリを提供します。組織または環境レベルでリソースを格納することで、組織内に展開された API プロキシや、異なる環境に展開された API プロキシ間で、コードと構成の再利用、共有が可能になります。

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

リソースタイプ

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

  • jsc: コンパイルされた JavaScript。Javascript タイプのポリシーが参照します。
  • java: JAR ファイル内の Java クラス。JavaCallout タイプのポリシーが参照します。
    Apigee Edge プランのみで使用可能。「Apigee Developer vs. Apigee Edge」を参照してください。
  • py: Python scripts, referenced by policies of type Python
    (Available in Apigee Edge plans only. See Apigee Developer vs. Apigee Edge.)
  • node: Node.js ファイル。主要な Node.js ファイル、関連するソースファイル、モジュール依存関係が含まれます。
  • wsdl: WSDL ファイル。MessageValidation タイプのポリシーが参照します。
  • xsd: XML スキーマ。MessageValidation タイプのポリシーが参照します。
  • xsl: XSLT 変換。XSL タイプのポリシーが参照します。

Resource files API API に記述されているように、リポジトリは以下の URI で使用可能です。

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

また Edge 管理 UI の API プロキシ範囲で、あるいはプロキシエディタの「Develop」ビューでリソースを追加することもできます。

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

/organizations/{org_name}/resourcefiles/jsc

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

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

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

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

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

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

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

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

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

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

レスポンスの例:

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

リソースリポジトリへの値の入力

When updating an existing resource in a deployed API proxy, you must redeploy the API proxy after to ensure the resource changes are picked up.

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

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

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

組織のあらゆる環境で実行している 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:password

レスポンスの例:

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

You can also upload resources as files from your local machine as follows. It's important to use -F for the binary upload in cURL in order for the environment- and organization-scoped JavaScript files to be accessible by the JavaScript policy.

$ 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:password

Postman など、REST クライアントを使用する場合 :

  • Content-Type を multipart/form-data に設定します。
  • スクリプトをファイルとして添付します。

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

例えば、JavaScript を Request 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 リソースガイドライン

When you reference a Node.js script in an API proxy, you do so with the <ResourceURL> element in the API proxy's TargetEndpoint configuration, as described in Adding Node.js to an existing API proxy. For example:

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

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

Java リソースの追加

You can add compiled Java resources as JAR files using multiple options in cURL, such as -T, --data-binary, or -F option (not the -d option). For example:

curl -v -u {user}:{password} -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 {user}:{password} -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 {user}:{password} -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"

パッケージの命名: Java Callout では、パッケージ名として「io.apigee」または「com.apigee」を使用しないでください。これらの名前は予約されており、他の Apigee モジュールで使用されています。

参考資料

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

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

API プロキシの範囲と同様に、環境および組織の範囲で API リソースを更新したり削除したりするには、以下を参照してください。

リソース名の解決

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

Node.js: 以下の情報の例外は Node.js です。Node.js の場合、API プロキシ範囲にスクリプトを格納する必要があります。「Node.js リソースガイドライン」を参照してください。

organizations と environments という 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:password
$ 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:password

同じリソースが、組織レベルと環境レベルの 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>

ポリシー参照は、明示的にリポジトリに解決することができません。最も詳細な範囲で、ポリシー内のリソース名と一致する名前を持つ最初のリソースが解決されます。

So, when the API proxy is deployed in the environment prod, the Policy will resolve the environment-scoped pathSetter.js resource:

/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");

For more information on listing and getting resource files, see Resource files API in the management API.

Help or comments?