JavaScript-REST-Proxy

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu DataSnap-REST


Wenn Sie den Experten für REST-Anwendungen verwenden, wird ein Serverprojekt erstellt, das mehrere Webdateien enthält. Einige davon sind einfach nur Beispiele dafür, wie der JavaScript-Proxy (ServerFunctionInvoker.html, ReverseString.html, ServerFunctionInvoker.js, connection.js, sowie alle Bilder und .css-Dateien) verwendet wird. Die anderen Dateien, die JavaScript-Dateien, dienen der Behandlung aller XMLHTTPRequest- und JSON-Konvertierungsfragen. Wenn Sie Ihren Client schreiben, müssen Sie sich daher nur noch darum kümmern, welche Servermethoden aufgerufen werden sollen.

Zum Erstellen einer neuen Webseite können Sie dem Beispiel der anderen Seitengeneratorkomponenten folgen oder den Datei-Dispatcher für htm/html aktivieren und Ihre html-Datei in dasselbe Verzeichnis (oder in ein Unterverzeichnis davon) platzieren, in dem die exe-Datei bereitgestellt wird. Für die Webseite, die Sie erstellen, sind zumindest Referenzen auf die Dateien json-min.js, ServerFunctionExecutor.js und ServerFunctions.js (der Proxy) erforderlich. Wenn Sie in Ihrem Server einen Authentifizierungsmanager verwenden, benötigen Sie auch die Datei base64.js. Die Arbeit mit codeintensiven Callback-Funktionen erfordert darüber hinaus die Datei CallbackFramework.js.

Wenn Sie beispielsweise eine Servermethodenklasse namens “TServerMethods1” und darin eine public-Funktion namens “EchoString” verwenden, die einen String übernimmt und einen String zurückgibt, können Sie diese Servermethode mit dem folgenden JavaScript-Code remote von der Webseite aufrufen:

var Proxy = new TServerMethods1(); 
var Response = Proxy.EchoString(“Hello World”); 
alert(Response.result); //zeigt ein Dialogfeld mit der Meldung “Hello World” an

Dieser Code erzeugt eine Instanz der Proxy-Klasse mit denselben Namen wie die Servermethodenklasse auf dem Server. Dann wird die Funktion "EchoString" für den Proxy aufgerufen. Dem Proxy ist bekannt, wie die Anforderung formatiert und ein XMLHTTPRequest-Objekt im Hintergrund zum Aufrufen der Serverfunktion verwendet werden muss. Dieser Aufruf gibt ein JSON-Objekt mit Schlüssel/Wertepaaren zurück. Jeder Schlüssel ist hierbei der Name des Parameters, wie er im Servercode vorkommt (‘result’ für den Rückgabeparameter), und jeder Wert ist der übergebene Wert (für Eingabeparameter) oder der zurückgegebene Wert (für var/out/return-Parameter).

Der JavaScript-Proxy (ServerFunctions.js) wird für mit dem Experten für REST-Anwendungen erstellte Projekte automatisch erzeugt. Dies geschieht durch Hinzufügen eines Hook in das Ereignis OnBeforeDispatch des Datei-Dispatchers, der den Proxy-Generator aufruft, wenn die Proxy-Datei nicht mehr aktuell ist. Im JS-Proxy ist eine 'Klasse' (Funktion) für jede Servermethodenklasse vorhanden, die Sie auf Ihrem Server registriert haben, sowie eine für DSAdmin. Jede dieser JS-Klassen enthält eine Funktion, die eine Servermethode mit demselben Namen und derselben Methodensignatur auf dem Server zuordnet. Wenn diese Funktion auf dem Server vorhanden ist:

function ReverseString(Value: String): String;

Dann ist diese Funktion im JavaScript-Proxy vorhanden:

function ReverseString(Value) ...

Behandlung des Ergebnisses

Wie bereits weiter oben erwähnt, ist das Ergebnis des Aufrufs der JavaScript-Funktion nicht einfach das von der Servermethode zurückgegebene Ergebnis. Sie erhalten ein JSON-Objekt zurück, das, wenn der Aufruf erfolgreich war, ein Schlüssel/Wertepaar jedes Parameters und dessen Endwertes ist. Auf das Ergebnis eines Serverfunktionsaufrufs kann mit der Eigenschaft "result" des zurückgegebenen Objekts zugegriffen werden. Alle Parameter der Serverfunktion können mit denselben Namen angesprochen werden, die in der Signatur der Servermethode in Delphi erscheinen.

Einige Parameternamen werden nicht unterstützt, insbesondere Namen, die sich mit JavaScript-Schlüsselwörtern, wie z.B. 'arguments', überschneiden würden. returnObject und resultArray sind ebenfalls nicht zulässig.

Wenn das Ergebnis asynchron und nicht im selben Thread, für den die Funktion aufgerufen wurde, zurückgegeben werden soll, übergeben Sie eine Funktion als zusätzlichen Parameter, nachdem Sie die Werte für alle in der Signatur der JavaScript-Funktion aufgeführten Parameter gesetzt haben. Mit der Funktion EchoString würde dies etwa folgendermaßen aussehen:

var HandleResult = function(jsonValue) {
  //handle the result
}

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