Vous consultez la documentation Apigee Edge.
Accédez à la documentation Apigee X.
Quelle version de Node.js est compatible avec Apigee Edge ?
Edge est actuellement compatible avec Node.js 0.10.32.
Quels modules Node.js standards sont compatibles avec Edge ?
Le tableau suivant vous permet de déterminer les modules Node.js standards inclus dans Edge. Dans certains cas, les modules inclus ne sont que partiellement compatibles. Il s'agit de modules intégrés à Node.js.| Module | État | Remarques |
|---|---|---|
assert |
Compatible | |
buffer |
Compatible | |
child_process |
Limité | Une exception sera générée si une tentative de création d'un sous-processus est effectuée. Toutefois, "fork" est accepté pour générer des sous-scripts. |
cluster |
Désactivé | La méthode cluster.isMaster renvoie toujours "true", et les autres méthodes ne sont pas implémentées. Une copie de chaque script Node.js est déployée sur chaque processeur de messages Edge. |
crypto |
Compatible | |
dns |
Compatible | |
domain |
Compatible | |
dgram |
Limité | En raison de notre architecture réseau, les applications Node.js dans l'environnement Apigee ne pourront pas accéder aux services sur Internet via UDP. |
events |
Compatible | |
fs |
Limité | L'accès au système de fichiers est limité au répertoire dans lequel le script a été lancé, à savoir le répertoire /resources/node. Les scripts Node.js peuvent lire et écrire des fichiers dans ce répertoire, par exemple en tant que zone de travail temporaire, mais il n'y a aucune garantie quant à la durée de conservation des fichiers. |
http |
Compatible | L'hôte virtuel et le chemin des requêtes entrantes sont spécifiés dans le proxy d'API, et non par le module HTTP. Pour en savoir plus, consultez Comprendre la compatibilité avec les modules http et https. |
https |
Compatible | La création d'un serveur "https" se comporte de la même manière qu'un serveur "http". Pour en savoir plus, consultez Comprendre la compatibilité avec les modules http et https. |
module |
Compatible | |
net |
Limité | Toute tentative d'écoute des connexions TCP entrantes générera une exception. |
path |
Compatible | |
module |
Compatible | |
process |
Compatibilité partielle | La fonctionnalité permettant de manipuler l'ID utilisateur, l'appartenance à un groupe et le répertoire de travail n'est pas prise en charge. |
punycode |
Compatible | |
querystring |
Compatible | |
readline |
Désactivé | Il n'existe pas d'entrée standard pour les scripts exécutés sur Apigee Edge. |
repl |
Désactivé | Il n'existe pas d'entrée standard pour les scripts exécutés sur Apigee Edge. |
module |
Inclus | |
STDIO |
Compatible |
La sortie et les erreurs standards sont redirigées vers un fichier journal dans l'infrastructure Apigee Edge. Vous pouvez afficher ces journaux en cliquant sur le bouton Journaux Node.js dans l'UI de gestion Apigee Edge pour votre proxy d'API. Il n'existe pas d'entrée standard pour les scripts exécutés sur Apigee Edge. Toutefois, vous pouvez transmettre des arguments à l'aide de l'élément ScriptTarget de TargetEndpoint. Pour en savoir plus, consultez Configuration avancée de ScriptTarget. |
stream |
Compatible | |
string_decoder |
Compatible | |
timers |
Inclus | |
tls |
Compatible | Les paramètres TLS (Transport Layer Security) fonctionnent de la même manière que dans Node.js. Pour en savoir plus, consultez Utiliser le module Node.js TLS (SSL) sur Apigee Edge. |
tty |
Désactivé | Il n'existe pas d'entrée standard pour les scripts exécutés sur Apigee Edge. |
url |
Compatible | |
util |
Compatible | |
vm |
Compatible | |
zlib |
Compatible |
Modules compatibles supplémentaires
Cette section liste les modules supplémentaires qui ne sont pas compatibles avec Node.js standard, mais qui le sont avec Trireme et Trireme exécuté sur Apigee Edge. Trireme est le conteneur Node.js Open Source qui s'exécute sur Apigee Edge. Il est conçu pour exécuter des scripts Node.js dans une machine virtuelle Java (JVM). Tous ces modules sont disponibles sur NPM.
| Module | Description |
|---|---|
| apigee-access | Permet aux applications Node.js exécutées sur la plate-forme Apigee Edge d'accéder aux fonctionnalités spécifiques à Apigee. Vous pouvez utiliser ce module pour accéder aux variables de flux et les modifier, récupérer des données du Secure Store et utiliser les services de cache Edge, de quota et OAuth. Consultez également Utiliser le module apigee-access. |
| trireme-support | Permet aux applications Node.js de profiter des fonctionnalités spécifiques à Trireme. Actuellement, une seule fonctionnalité est acceptée : le chargement des modules Node.js intégrés à Java. Remarque : loadJars n'est pas compatible avec Edge Cloud. |
| trireme-xslt | Présente une abstraction du traitement XLST. Il est spécifiquement conçu pour la plate-forme Trireme afin de permettre un traitement efficace de XSLT lorsque des applications Node.js sont exécutées sur Java. |
| trireme-jdbc | Fournit un accès à JDBC depuis Node.js. Remarque : Non compatible avec Edge Cloud. Pour Edge Private Cloud, vous pouvez placer des fichiers JAR JDPC dans le chemin de classe et utiliser ce module. |
Compatibilité avec les modules Node.js couramment utilisés
Restrictions concernant les scripts Node.js
Notez toutefois qu'Edge impose certaines restrictions aux scripts Node.js, par exemple les suivantes :
- Les applications Node.js dans l'environnement Apigee Edge ne peuvent pas accéder aux services sur Internet via UDP en raison de l'architecture réseau Edge.
- L'accès au système de fichiers est limité au répertoire dans lequel le script Node.js a été lancé : le répertoire /resources/node. Les scripts Node.js peuvent lire et écrire des fichiers dans ce répertoire, par exemple en tant que zone de travail temporaire, mais il n'y a aucune garantie quant à la durée de conservation des fichiers.
- Les tentatives d'écoute des connexions TCP entrantes génèrent une exception.
- La fonctionnalité permettant de manipuler l'ID utilisateur, l'appartenance à un groupe et le répertoire de travail n'est pas prise en charge.
- Pour les entrées standards, vous ne pouvez transmettre des arguments qu'à l'aide de l'élément ScriptTarget de TargetEndpoint. Pour en savoir plus, consultez Configuration avancée de ScriptTarget.
- Pour la sortie standard, vous ne pouvez utiliser que le bouton "Journaux Node.js" dans l'interface utilisateur de gestion Edge pour votre proxy. Vous pouvez également utiliser la commande "apigeetool getlogs". Pour en savoir plus, consultez Déployer une application Node.js autonome.
- Les modules qui dépendent du code natif ne sont pas compatibles.
- Les modules qui dépendent des fonctionnalités EcmaScript 6, telles que les promesses et les générateurs, ne sont pas compatibles.
- Les indicateurs d'exécution Node.js tels que "harmony-proxies" ne sont pas acceptés.
Définir des restrictions de connexion IP sur Edge pour le cloud privé
Edge for Private Cloud peut empêcher le code Node.js d'accéder aux adresses IP commençant par "10.". "192.168" et localhost. Si vous tentez d'accéder à ces adresses IP, une erreur s'affiche :
{ [Error: connect EINVAL] message: 'connect EINVAL', code: 'EINVAL', errno: 'EINVAL', syscall: 'connect' }
Vous pouvez modifier ces restrictions en définissant la propriété conf_nodejs_connect.ranges.denied dans le fichier message-processors.properties pour chaque processeur de messages. Par défaut, cette propriété a la valeur suivante :
- Edge 4.17.05 et versions antérieures : conf_nodejs_connect.ranges.denied=10.0.0.0/8,192.168.0.0/16,127.0.0.1/32
- Edge 4.17.09 et versions ultérieures : conf_nodejs_connect.ranges.denied= (aucune restriction)
Pour définir cette propriété :
- Ouvrez le fichier message-processor.properties dans un éditeur. Si le fichier n'existe pas, créez-le :
> vi /<inst_root>/apigee/customer/application/message-processor.properties - Définissez la propriété comme vous le souhaitez. Par exemple, pour refuser l'accès à localhost uniquement :
conf_nodejs_connect.ranges.denied=127.0.0.1/32 - Enregistrez les modifications.
- Assurez-vous que le fichier de propriétés appartient à l'utilisateur "apigee" :
> chown apigee:apigee /<inst_root>/apigee/customer/application/message-processor.properties - Redémarrez le processeur de messages :
> /<inst_root>/apigee/apigee-service/bin/apigee-service edge-message-processor restart
Comprendre la compatibilité avec les modules http et https
Toutes les applications Node.js exécutées dans Apigee Edge doivent utiliser le module http ou https pour écouter les requêtes entrantes. Si vous déployiez un script qui n'écoute pas les requêtes entrantes, il s'exécuterait simplement et se fermerait.
La méthode listen des modules http et https dans Node.js prend un numéro de port comme paramètre. Exemple :
svr.listen(process.env.PORT || 9000, function() { console.log('The server is running.'); });
Cet argument "port" est obligatoire dans Node.js, mais Apigee Edge l'ignore. Au lieu de cela, le proxy d'API dans lequel le script Node.js s'exécute spécifie l'hôte virtuel sur lequel il écoute, et l'application Node.js utilise ces mêmes hôtes virtuels, comme n'importe quel autre proxy Apigee Edge.
Chaque environnement d'Apigee comporte au moins un hôte virtuel. L'hôte virtuel définit les paramètres HTTP pour la connexion à l'organisation Apigee. Tous les proxys d'API d'un environnement partagent les mêmes hôtes virtuels. Par défaut, deux hôtes virtuels sont disponibles pour chaque environnement : default et secure. Pour en savoir plus, consultez
Obtenir un hôte virtuel et Cycle de vie du développement d'API.
La commande apigeetool deploynodeapp génère un wrapper de proxy Apigee Edge autour de l'application Node.js. Une fois déployée, l'application Node.js écoute sur l'hôte virtuel par défaut défini pour l'environnement. L'URL d'une application Node.js sera toujours http://{org_name}-{env_name}.apigee.net.
Traiter les requêtes entrantes
Comme les autres applications Apigee Edge, si l'application proxy est configurée pour écouter l'hôte virtuel secure, elle acceptera les requêtes entrantes à l'aide du protocole HTTPS.
Traiter les requêtes sortantes
En plus de recevoir le trafic entrant, les applications Node.js dans Apigee Edge peuvent utiliser les modules http et https pour effectuer des requêtes sortantes comme n'importe quelle autre application Node.js. Ces modules fonctionnent comme d'habitude dans Node.js.
Comprendre la compatibilité avec le module TLS
Apigee Edge est compatible avec le module tls Node.js.
Ce module utilise OpenSSL pour fournir une communication de flux chiffrée TLS (Transport Layer Security) et/ou SSL (Secure Socket Layer). Vous pouvez utiliser le module tls pour créer des connexions sécurisées aux services de backend à partir d'applications Node.js exécutées sur Edge.
Pour comprendre le fonctionnement du module tls sur Apigee Edge, il est important de comprendre comment les virtual hosts sont utilisés sur Apigee Edge. Chaque environnement d'Apigee comporte au moins un hôte virtuel. L'hôte virtuel définit les paramètres HTTP pour la connexion à l'organisation Apigee. Tous les proxys d'API d'un environnement partagent les mêmes hôtes virtuels. Par défaut, deux hôtes virtuels sont disponibles pour chaque environnement : default et secure. Pour en savoir plus sur les hôtes virtuels, consultez
Obtenir un hôte virtuel et Cycle de vie du développement d'API.
Voyons maintenant comment Apigee Edge gère la communication TLS (SSL) pour les requêtes entrantes et sortantes sur les applications Node.js :
Traiter les requêtes entrantes
Selon la configuration des hôtes virtuels pour votre organisation, Edge propose les options suivantes :
- Si le proxy d'API est configuré pour écouter l'hôte virtuel
default, il accepte les requêtes via HTTP. - Si le proxy d'API est configuré pour écouter l'hôte virtuel
secure, il accepte les requêtes via HTTPS. L'URL se trouvera sous le domaineapigee.netet un certificat SSL générique pour*.apigee.netsera utilisé. Tant que les applications envoient des requêtes au domaineapigee.net, le certificat SSL sera validé normalement.
Traiter les requêtes sortantes
Vous pouvez effectuer des requêtes sortantes avec le module tls de la même manière que vous le feriez normalement dans Node.js. En gros, vous devez ajouter des clés et des certificats côté client (fichiers .pem) au répertoire resources/node et les charger dans votre script. Pour savoir comment utiliser le module tls et ses méthodes, consultez la documentation du module tls Node.js.
Configuration avancée de ScriptTarget
<TargetEndpoint name="default"> <ScriptTarget> <ResourceURL>node://hello.js</ResourceURL> <EnvironmentVariables> <EnvironmentVariable name="NAME">VALUE</EnvironmentVariable> </EnvironmentVariables> <Arguments> <Argument>ARG</Argument> </Arguments> </ScriptTarget> </TargetEndpoint>