Programmer des proxys d'API avec JavaScript

<ph type="x-smartling-placeholder"></ph> Vous consultez la documentation Apigee Edge.
Accédez à la page Documentation sur Apigee X.
En savoir plus

Dans cette rubrique, vous allez apprendre à utiliser JavaScript pour ajouter dynamiquement des en-têtes HTTP à une message de réponse et comment analyser une réponse JSON et renvoyer un sous-ensemble de ses propriétés au l'application à l'origine de la demande.

Télécharger et tester l'exemple de code

<ph type="x-smartling-placeholder">

À propos de cet exemple de livre de recettes

Cet exemple de livre de recettes illustre un modèle de proxy d'API dans lequel vous implémentez le comportement de l'API dans JavaScript. Les exemples JavaScript sont conçus pour vous montrer comment travailler avec des variables simples. et le contenu des messages. Un exemple vous montre comment get et set des variables. Le deuxième vous montre comment analyser un fichier JSON et créer un message à partir du résultat.

Deux exemples JavaScript se trouvent dans le proxy d'API:

  • setHeaders.js: ce JavaScript obtient les valeurs de quelques variables qui sont définis lorsqu'un proxy d'API est appelé. Le code JavaScript ajoute ces variables à la réponse afin que vous puissiez voir leurs valeurs pour chaque requête que vous effectuez.
  • minimize.js: ce code JavaScript vous indique comment utiliser les messages contenus. L'idée derrière cet exemple est qu'un service renvoie souvent plus de données que nécessaires. JavaScript analyse le message de réponse, extrait quelques exemples des propriétés, puis les utilise pour créer le contenu du message de réponse.

Le code pour setHeader.js:

context.setVariable("response.header.X-Apigee-Target", context.getVariable("target.name"));
context.setVariable("response.header.X-Apigee-ApiProxyName", context.getVariable("apiproxy.name"));
context.setVariable("response.header.X-Apigee-ProxyName", context.getVariable("proxy.name"));
context.setVariable("response.header.X-Apigee-ProxyBasePath", context.getVariable("proxy.basepath"));
context.setVariable("response.header.X-Apigee-ProxyPathSuffix", context.getVariable("proxy.pathsuffix"));
context.setVariable("response.header.X-Apigee-ProxyUrl", context.getVariable("proxy.url"));

Le code pour minimize.js:

// Parse the respose from the target.
var res = JSON.parse(context.proxyResponse.content);

// Pull out only the information we want to see in the response.
var minimizedResponse = { city: res.root.city,
                          state: res.root.state };
          
// Set the response variable. 
context.proxyResponse.content = JSON.stringify(minimizedResponse);

Vous pouvez accéder aux variables de flux en JavaScript via l'objet de contexte. Cet objet fait partie de le modèle d'objet Edge JavaScript. Pour en savoir plus sur le modèle d'objet, consultez la page Modèle d'objet JavaScript.

Avant de commencer

Avant d'explorer cet exemple de livre de recettes, vous devez également connaître ces concepts fondamentaux concepts:

  • En quoi consistent les stratégies et comment les associer à des proxys ? Pour bien présenter les règles, consultez la section Qu'est-ce qu'un de sécurité ?
  • La structure d'un flux proxy, comme expliqué dans la section Configurer des flux Les flux vous permettent spécifier la séquence dans laquelle les stratégies sont exécutées par un proxy d'API. Dans cet exemple, plusieurs des stratégies sont créées et ajoutées à un flux de proxy d'API.
  • Comment un projet de proxy d'API est organisé sur votre système de fichiers, comme expliqué dans Documentation de référence sur la configuration du proxy d'API
  • Connaissance pratique des langages XML, JSON et JavaScript Dans cet exemple, vous créez l'API proxy et ses stratégies avec des fichiers XML qui résident sur le système de fichiers.

Si vous avez téléchargé l'exemple de code, vous pouvez localiser tous les fichiers abordés dans ce dans le dossier d'exemple javascript-cookbook. Les sections suivantes traitent l'exemple de code en détail.

Comprendre le flux du proxy

Pour que JavaScript s'exécute dans un proxy d'API, vous devez l'associer à un flux à l'aide d'une stratégie. une pièce jointe appelée "Étape". Une règle de type JavaScript (majuscules/minuscules) contient simplement un référence au nom d'un fichier JavaScript. Vous faites pointer la stratégie vers un fichier JavaScript à l'aide de la méthode ResourceURL.

Par exemple, la stratégie suivante fait référence au fichier JavaScript appelé setHeader.js

<Javascript name='setHeaders' timeLimit='200'>
    <ResourceURL>setHeaders.js</ResourceURL>
</Javascript>

Vous pouvez associer cette règle à un flux de proxy d'API comme vous le feriez pour tout autre type de règle. Par en associant la règle au flux de proxy de l'API, vous indiquez où le JavaScript doit être exécuté. Cela vous permet d'exécuter du code JavaScript qui interagit avec les messages de demande ou de réponse. car ces messages "circulent" via le proxy d'API. Dans cet exemple, les deux JavaScript s'exécutent dans le flux de réponse, puisque les stratégies ont deux fonctions: définir des en-têtes HTTP sur le message de réponse et "réduire" le message de réponse qu'Apigee Edge renvoie à l'application à l'origine de la demande.

Si vous ouvrez cette configuration de flux dans l'UI de gestion, vous verrez la configuration du flux ci-dessous.

Sélectionnez Points de terminaison du proxy > par défaut > PostFlow dans le navigateur volet.

La configuration XML correspondante pour le ProxyEndpoint (nommé "default") s'affiche ci-dessous.

<ProxyEndpoint name="default">
  <PostFlow>
    <Response>
      <!-- Steps reference policies under /apiproxy/policies -->
      <!-- First, set a few HTTP headers with variables for this transaction. -->
      <Step><Name>setHeaders</Name></Step>
      <!-- Next, transform the response from XML to JSON for easier parsing with JavaScript -->
      <Step><Name>transform</Name></Step>
      <!-- Finally, use JavaScript to create minimized response with just city and state. -->
      <Step><Name>minimize</Name></Step>
    </Response>
  </PostFlow>
  <HTTPProxyConnection>
        <!-- BasePath defines the network address for this API proxy. See the script 'invoke.sh' to see how the complete URL for this API proxy is constructed.-->
    <BasePath>/javascript-cookbook</BasePath>
     <!-- Set VirtualHost to 'secure' to have this API proxy listen on HTTPS. -->
    <VirtualHost>default</VirtualHost>
  </HTTPProxyConnection>
  <RouteRule name="default">
    <TargetEndpoint>default</TargetEndpoint>
  </RouteRule>
</ProxyEndpoint>

Voici un résumé des éléments du flux.

  • &lt;Request&gt; – La <Request> se compose de plusieurs éléments &lt;Step&gt; éléments. Chaque étape appelle l'une des règles que vous créez dans les autres ce sujet. Ces règles associent un code JavaScript au flux de proxy de l'API et l'emplacement du un rattachement de règle détermine le moment où JavaScript s'exécute.
  • &lt;Response&gt; – La <Response> inclut également <Steps>. Ces étapes appellent également des stratégies qui sont chargées de traiter le code final de la cible (dans cet exemple, il s'agit de la cible de service fictive d'Apigee ; notez que HTTPTargetConnection sous /apiproxy/targets/default.xml.)
  • &lt;HTTPProxyConnection&gt; : spécifie l'hôte et le chemin d'URI qui définir l'adresse réseau que les applications appellent pour utiliser cette API.
  • &lt;RouteRule&gt; : cet élément spécifie le point de terminaison TargetEndpoint. est appelée par le ProxyEndpoint.

Ajouter du code JavaScript à un proxy

Les scripts JavaScript (à l'instar des scripts Python, des fichiers JAR Java, des fichiers XSLT, etc.) sont stockés sous forme de ressources. Lorsque vous commencez à travailler avec JavaScript, il est plus facile de stocker votre Fichiers JavaScript dans le proxy d'API. Au fur et à mesure que vous avancez, JavaScript doit être considéré comme générique et réutilisables que possible, puis stockés au niveau de l'environnement ou de l'organisation. Cela vous évite d'avoir à stocker les mêmes fichiers JavaScript dans plusieurs proxys d'API, ce qui peut rapidement devenir ingérable.

Pour en savoir plus sur le stockage de ressources au niveau de l'organisation et de l'environnement, consultez Fichiers de ressources.

Essayer

Pour obtenir des instructions sur le déploiement et l'appel du proxy, consultez la section README du livre de recettes JavaScript.

Importer et déployer le proxy d'API

Après avoir apporté des modifications, vous pouvez enregistrer le proxy d'API dans le compilateur de proxys d'API. dans l'UI de gestion.

Vous pouvez également exécuter la commande suivante dans le répertoire /api-platform-samples/doc-samples/javascript-cookbook

$ sh deploy.sh

Tester JavaScript

Exécutez la commande suivante dans le répertoire /api-platform-samples/doc-samples/javascript-cookbook

$ sh invoke.sh

L'option curl -v est utilisée dans le script shell pour afficher les en-têtes HTTP sur la réponse. modifié par le JavaScript.

Vous pouvez envoyer directement une demande en procédant comme suit:

$ curl -v http://{org_name}-test.apigee.net/javascript-cookbook 

Si le code JavaScript s'exécute correctement, une réponse semblable à la suivante s'affiche:

< X-Apigee-Demo-Target: default
< X-Apigee-Demo-ApiProxyName: simple-javascript
< X-Apigee-Demo-ProxyName: default
< X-Apigee-Demo-ProxyBasePath: /javascript-cookbook
< X-Apigee-Demo-ProxyPathSuffix: /xml
< X-Apigee-Demo-ProxyUrl: http://rrt331ea.us-ea.4.apigee.com/javascript-cookbook/xml
 
{"city":"San Jose","state":"CA"}

Vous pouvez maintenant modifier le code JavaScript pour essayer de nouvelles choses, redéployer le proxy d'API et vérifier des résultats en envoyant la même demande. Veillez à toujours déployer le proxy d'API qui contient votre code JavaScript pour que les modifications soient prises en compte.

Erreurs de script

Vous verrez inévitablement des erreurs lors de l'écriture du code JavaScript. Le format des erreurs JavaScript qui que vous verrez comme étant émis par un proxy d'API est illustré ci-dessous.

{  
   "fault":{  
      "faultstring":"Execution of rewriteTargetUrl failed with error: Javascript runtime error: \"TypeError: Cannot find function getVariable in object TARGET_REQ_FLOW. (rewriteTargetUrl_js#1). at line 1 \"",
      "detail":{  
         "errorcode":"steps.javascript.ScriptExecutionFailed"
      }
   }
}

Quand utiliser JavaScript ?

Sur Apigee Edge, il existe généralement plusieurs façons d'implémenter une fonctionnalité spécifique. Utilisez des stratégies prêtes à l'emploi dans la mesure du possible, et évitez la tentation de coder tous vos proxys d'API en JavaScript. Même si Apigee Edge utilise du code JavaScript compilé pour améliorer il est peu probable que JavaScript fonctionne aussi bien que les stratégies. JavaScript peut être plus difficiles à gérer et à déboguer. Réservez JavaScript pour une fonctionnalité propre à votre exigences.

Si les performances constituent une préoccupation pour les fonctionnalités personnalisées, utilisez autant que possible Java.

Résumé

Dans cette rubrique du livre de recettes, vous avez appris comment JavaScript peut être inclus dans un proxy d'API. pour implémenter un comportement personnalisé. Comportement personnalisé implémenté par les exemples Expliquer comment obtenir et variables, et comment analyser JSON et créer une réponse personnalisée messages.