JavaScript REST プロキシ

提供: RAD Studio
移動先: 案内検索

DataSnap REST への移動


REST アプリケーション ウィザードを使用すると、いくつかの Web ファイルが含まれたサーバー プロジェクトが作成されます。それらのファイルの一部(ServerFunctionInvoker.html、ReverseString.html、ServerFunctionInvoker.js、connection.js のほか、すべての画像と CSS ファイル)は、JavaScript プロキシの使い方を示す例にすぎません。その他のファイルつまり JavaScript ファイルは、XMLHTTPRequest と JSON の変換に関するすべての問題を処理するためにプロジェクトに含まれています。そのため、クライアントの作成時に気にしなければならないのは、どのサーバー メソッドを呼び出すかだけです。

新しい Web ページを作成するには、他のページ プロデューサ コンポーネントの例に従うことができます。つまり、HTM/HTML ディスパッチ用のファイル ディスパッチャを有効にし、EXE の公開先と同じディレクトリまたはその任意のサブディレクトリに HTML ファイルを格納します。作成する Web ページには、少なくとも、json-min.js ファイル、ServerFunctionExecutor.js ファイル、ServerFunctions.js ファイル(プロキシ ファイル)への参照が必要ですが、サーバーの認証マネージャを使用する場合は base64.js も、重量コールバックを扱う場合は CallbackFramework.js も、それぞれ必要になります。

"TServerMethods1" というサーバー メソッド クラスと、そのクラスの "EchoString" という public 関数(文字列を受け取り文字列を返すもの)があれば、以下の JavaScript コードを使って、このサーバー メソッドを Web ページからリモートで呼び出すことができます。


var Proxy = new TServerMethods1();
var Response = Proxy.EchoString(“Hello World”);
alert(Response.result); // "Hello World" というメッセージのダイアログを表示する

ここでは、プロキシ クラス(サーバー上のサーバー メソッド クラスと同じ名前)のインスタンスを生成します。そのあと、プロキシの EchoString 関数を呼び出します。要求の書式をどう設定するかや、XMLHTTPRequest を裏で使用してサーバーの関数を呼び出す方法はこの関数が知っています。この呼び出しの戻り値は、キーと値のペアを格納した JSON オブジェクトです。各キーはサーバー コードのようにパラメータの名前で("result" は戻り値パラメータの名前)、各値は渡される値(入力パラメータの場合)か返される値(var/out/戻り値パラメータの場合)です。

JavaScript プロキシ(ServerFunctions.js)は、REST アプリケーション ウィザードで作成されるプロジェクトに対して自動的に生成されます。これは、ファイル ディスパッチャの OnBeforeDispatch イベント内にフックを追加することで行われます。プロキシ ファイルが最新でないように見える場合は、このフックがプロキシ ジェネレータを呼び出します。JavaScript プロキシの内部には、サーバーに登録したサーバー メソッド クラスごとに "クラス"(関数)があり、DSAdmin 用のクラスもあります。これらの JavaScript クラスにはそれぞれ、サーバーにある同じ名前および同じメソッド シグネチャのサーバー メソッドにマッピングされる関数があります。サーバー上に次のような関数がある場合、


function ReverseString(Value: String): String;

JavaScript プロキシには次のような関数があります。


function ReverseString(Value) ...

結果の処理

上記のように、サーバー メソッドから返される結果がそのまま JavaScript 関数呼び出しの結果になるわけではありません。JSON オブジェクトが返されるのです。呼び出しが正常に終了した場合、このオブジェクトは、各パラメータとその最終的な値から成るキー/値ペアになります。サーバー関数呼び出しの結果には、返されたオブジェクトの "result" プロパティからアクセスできます。サーバー関数の他のパラメータはどれも、名前(Delphi で書かれたサーバー メソッドのシグネチャに現れるもの)でアクセスできます。

パラメータ名のなかには、サポートされていないものがあります。特に、"arguments" のような JavaScript キーワードと競合する名前は使用できません。また、returnObject と resultArray も使用できません。

結果が関数の呼び出し元のスレッドではなく非同期的に返されるようにする場合は、JavaScript 関数のシグネチャに現れるすべてのパラメータに値を設定したあと、追加パラメータとして関数を渡します。EchoString 関数を例に取ると、以下のようなコードになります。


var HandleResult = function(jsonValue) {
  // 結果を処理する
}

Proxy.EchoString('Hello World', HandleResult);