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.

既存の API プロキシへの Node.js の追加

Introduction

このトピックでは、Node.js アプリケーションをローカルファイルシステム上の既存のプロキシに追加する方法と、その既存のプロキシを Apigee Edge に展開する方法について説明します。 

開発環境の準備

このトピックは、プロキシ開発環境がローカルシステムにセットアップ済みで、そこに Node.js アプリケーションを統合したい場合を想定しています。

システムに既存のプロキシがなくても、Apigee Node.js サンプルを GitHub からいつでもダウンロードできます。このサンプルプロキシは node-samples/apigee/hello にあり、このトピックで取り上げるのと同じ組織パターンに従っています。

Node.js アプリを含むプロキシアプリケーションの基本構造は以下の図に示すパターンに従っており、ベースフォルダは /apiproxy で、サブフォルダに resourcestargetsproxies があります。Node.js ファイルは apiproxy/resources/node フォルダにあることが必要です。他のフォルダには、プロキシやターゲットのエンドポイント、プロキシフロー、条件フローなどを定義する XML ファイルが置かれます。API プロキシ構造の詳細については、「API プロキシ構成リファレンス」を参照してください。
 

プロキシの一部をなす Node.js コードはすべて /apiproxy/resources/node に配置されていることが必要です。展開された Edge は、コードがこのフォルダにあると想定します。

ScriptTarget を使用した Node.js ターゲットの指定

Node.js をプロキシに統合するうえで重要なのが、ターゲットエンドポイントの XML ファイルに <ScriptTarget> 要素を指定することです。プロキシファイル構造において、この XML ファイルは apiproxy/targets にあります。デフォルトで、ファイル名は default.xml です。

For context, consider that a target endpoint usually points to a backend service of some kind. In this case, we hit the Apigee mock target service. A target endpoint definition looks like this:

<TargetEndpoint name="default">
    <Description/>
    <Flows/>
    <PreFlow name="PreFlow">
        <Request/>
        <Response/>
    </PreFlow>
    <HTTPTargetConnection>
        <URL>http://mocktarget.apigee.net/</URL>
    </HTTPTargetConnection>
    <PostFlow name="PostFlow">
        <Request/>
        <Response/>
    </PostFlow>
</TargetEndpoint>

The <HTTPTargetConnection> element specifies the URL of the backend service, the Apigee mock target service.

ただし、Node.js の場合は、Node.js アプリケーションそのものターゲットです。このことは、apiproxy/targets/default.xml ファイルで <ScriptTarget> に指定します。 

<HTTPTargetConnection> 要素を使用するターゲットがバックエンドサービスの URL を指定するのではなく、Node.js アプリケーションが <ScriptTarget> 要素を基に直接参照されます。以下に例を示します。

<TargetEndpoint name="default">
    <ScriptTarget>
         <ResourceURL>node://server.js</ResourceURL>
    </ScriptTarget>
    <PreFlow name="PreFlow">
        <Request/>
        <Response/>
    </PreFlow>
</TargetEndpoint>

<ScriptTarget> に指定するパラメータは <ResourceURL> だけです。<ResourceURL> パラメータには、必ずプレフィックスとして node:// を指定し、それに続けてメイン Node.js スクリプトの名前を指定します。また、前述のとおり、Node.js リソースが API プロキシスコープの /apiproxy/resources/node に存在していることが必要です。

TargetEndpoint は HTTPTargetConnection または ScriptTarget を定義できますが、両方は定義できません。

メインスクリプトは、通常、node コマンドに渡すスクリプトの名前です。メインの Node.js スクリプトは、受信リクエストの待機に http モジュールを使用している限り、API 呼び出しがターゲットにルーティングされるたびに応答します。 

この例の目的をふまえて、メイン Node.js ファイル server.js のソースコードを示します。これは、リクエストを受信すると「Hello World!」を返す基本 HTTP サーバーです。

var http = require('http');
console.log('node.js application starting...');
var svr = http.createServer(function(req, resp) {
    resp.end('Hello, Node!');
});

svr.listen(process.env.PORT || 9000, function() {
    console.log('Node HTTP server is listening');
});
ポート番号が http.listen() メソッドで条件としてコーディングされていることに注目してください。Apigee では、受信待機ポートをこのようにコーディングして、システム変数として定義されていればそこから取得できるようにすることが、ベストプラクティスだと考えています。

まとめると、メイン Node.js アプリケーションが server.js というファイルに実装され、エンドポイント構成がどちらも default.xml という名前だとすると、Node.js スクリプトを含む API Proxy は以下のような構造になります。

/apiproxy/proxyName.xml
/apiproxy/proxies/default.xml
/apiproxy/targets/default.xml
/apiproxy/resources/node/server.js

アプリケーションの展開の準備

たいていの Node.js アプリには依存ファイルがあり、package.json ファイルがベースディレクトリにあります。この場合のベストプラクティスは、展開する前に npm ユーティリティを実行して、依存ファイルを最上位の node_modules ディレクトリに用意しておくことです。node_modules に含まれていないリモート依存ファイルがあると、Node.js アプリケーションは Edge で実行されません。

npm ユーティリティを使用すると、すべての依存ファイルをファイルシステムに簡単に取得できます。

  1. Node.js アプリケーションのベースディレクトリで以下を実行します。
$ npm install 

または

$ npm update

依存ファイルがインストールされると、プロキシを Edge に展開する準備が整います。

Apigee Edge への Node.js アプリの展開

展開する前に、組織名と、Apigee Edge アカウントのユーザー名およびパスワードを把握しておく必要があります。この情報は、展開ツールコマンドを正しく指定するために必要です。

コマンドは以下のとおりです。ここでは、現在ルートディレクトリにいることを (-d フラグで) 想定しています。プロキシ名が foo の場合は、このコマンドを foo ディレクトリで入力します。

$ apigeetool deployproxy -u username -p password -o org -e test -n hellonode -d .
各コマンドフラグの意味に関する情報を表示するには、以下のように入力します。

$ apigeetool deployproxy -h

簡単に紹介します。

  • -n アプリが展開されたときに作成されるプロキシの名前を指定します。管理 UI にはこの名前が表示されます。
  • -d  API プロキシのルートディレクトリを指定します。 
  • -o-e-u-p それぞれ組織名、展開環境、ユーザー名、パスワードを指定します。
以上です。Node.js アプリは API プロキシ内でラップされ、Edge に展開され、実行されます。リクエストを待機していたら、テストの準備が整っています。

新しい API プロキシのテスト

これで、Node.js アプリを既存の API プロキシに追加し、その既存のプロキシを Apigee Edge に展開しました。テストするには、以下の cURL コマンドを実行します。ここでは、デフォルトのベースパス (/) の使用が想定されています (ベースパスは、プロキシエンドポイント構成ファイルに指定されています)。忘れずに、org_name を自組織名に置き換えてください。cURL がインストールされていない場合は、URL をブラウザで入力できます。

$ curl http://org_name-test.apigee.net/
Hello, Node!

管理 UI での新しいプロキシの表示

Apigee Edge アカウントにログインし、「API Proxies」 ページに移動します。一覧に「hellonode」という名前のプロキシが表示されます。


「hellonode」をクリックして、プロキシの詳細を表示します。「Develop」ビューでは、アップロードしたソースコードの表示、ポリシーの追加、フローの編集などができます。



次のステップ

Apigee Edge で実行される Node.js アプリケーションのデバッグの詳細については、「Node.js プロキシのデバッグとトラブルシューティング」を参照してください。

サポートを受ける

ヘルプについては、Apigee カスタマサポートにアクセスしてください。

Help or comments?