JavaScript REST Proxy

De RAD Studio
Aller à : navigation, rechercher

Remonter à DataSnap REST


Lors de l'utilisation de l'expert Application REST, un projet serveur contenant plusieurs fichiers web sera créé. Certains fichiers sont simplement des exemples sur la façon d'utiliser le proxy JavaScript (ServerFunctionInvoker.html, ReverseString.html, ServerFunctionInvoker.js, connection.js, ainsi que toutes les images et fichiers css). Les autres fichiers, les fichiers JavaScript, sont là pour la gestion de tous les problèmes de conversion XMLHTTPRequest et JSON. Ainsi, lors de l'écriture de votre client, la seule chose à penser est la spécification des méthodes serveur à invoquer.

Pour créer une nouvelle page web, vous pouvez suivre l'exemple des autres composants générateur de page, ou activer le répartiteur de fichier pour la distribution htm;html et placer votre fichier html dans le répertoire dans lequel l'exe sera publié, ou tout sous-répertoire de celui-ci. La page web que vous créez nécessite au minimum des références aux fichiers json-min.js, ServerFunctionExecutor.js et ServerFunctions.js (le proxy), mais nécessite aussi base64.js si vous utilisez un gestionnaire d'authentification dans votre serveur, et CallbackFramework.js si vous travaillez avec des callbacks avancés.

Si vous avez une classe de méthodes serveur appelée "TServerMethods1" et une fonction publique, appelée "EchoString", qui prend une chaîne et renvoie une chaîne, vous pouvez invoquer cette méthode serveur à distance depuis la page web avec le code JavaScript suivant :

var Proxy = new TServerMethods1(); 
var Response = Proxy.EchoString(“Hello World”); 
alert(Response.result); //displays a dialog with message “Hello World”

Ceci crée une instance de la classe proxy, avec le nom de la classe de méthodes serveur sur le serveur. La fonction EchoString est ensuite appelée sur le proxy, qui sait comment formater la demande et utiliser un XMLHTTPRequest en coulisse pour invoquer la fonction du serveur. Un objet JSON de paires clé-valeur est renvoyé par cet appel, où chaque clé est le nom du paramètre tel qu'il est dans le code serveur ('result' pour le paramètre return) et chaque valeur est la valeur passée (pour les paramètres input) ou la valeur renvoyée (pour les paramètres var/out/return).

Le proxy JavaScript (ServerFunctions.js) est automatiquement généré pour les projets créés depuis l'expert Application REST. Ceci est effectué en ajoutant un hook dans l'événement OnBeforeDispatch du répartiteur de fichier, qui appelle le générateur de proxy si le fichier proxy apparaît obsolète. A l'intérieur du proxy JS, vous trouverez une 'classe' (fonction) pour chaque classe de méthodes serveur que vous avez enregistrée sur votre serveur, et aussi une pour DSAdmin. Dans chacune de ces classes JS, vous trouverez une fonction qui est mappée sur une méthode serveur avec le même nom et la même signature de méthode sur le serveur. Si vous avez cette fonction sur le serveur :

function ReverseString(Value: String): String;

Vous aurez alors cette fonction dans le proxy JavaScript :

function ReverseString(Value) ...

Gestion du résultat

Comme mentionné ci-dessus, le résultat de l'invocation de la fonction JavaScript n'est pas simplement le résultat renvoyé depuis la méthode serveur. Vous obtenez un objet JSON qui, si l'invocation a été réussie, sera une paire clé-valeur de chacun des paramètres et leurs valeurs finales. Le résultat d'un appel à une fonction serveur est accessible depuis la propriété "result" de l'objet renvoyé. Tous les autres paramètres de la fonction serveur sont accessibles par leur nom, tel qu'il apparaît dans la signature de la méthode serveur dans Delphi.

Certains noms de paramètre ne sont pas supportés, plus particulièrement les noms qui pourraient entrer en conflit avec des mots clés JavaScript tels que 'arguments'. Ne sont pas aussi autorisés : returnObject et resultArray.

Si vous voulez que le résultat soit renvoyé de manière asynchrone et pas sur le thread à partir duquel la fonction a été invoquée, passez une fonction en tant que paramètre supplémentaire après avoir défini les valeurs de tous les paramètres listés dans la signature de la fonction JavaScript. Avec la fonction EchoString en exemple, ceci ressemblerait à :

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

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