Appel d'un service REST à l'aide de JavaScript

Appelez un service REST à partir d'une tâche de script dans un flux de services. Ainsi, il est possible d'appeler des opérations de service ne pouvant pas être sélectionnées en tant qu'implémentation d'un service dans un flux de services dans Process Designer pour le Web.

Pourquoi et quand exécuter cette tâche

En utilisant JavaScript pour appeler un service REST, vous disposez de plus de fonctionnalités et de contrôle pour définir les paramètres d'entrée, les en-têtes de requête, les informations d'authentification, le traitement des paramètres de sortie et les erreurs de manipulation.

Procédure

  1. Assurez-vous que vous disposez d'une copie locale de la spécification OpenAPI (anciennement Swagger) pour le service REST et de toutes les données d'identification d'appel nécessaires pour pouvoir appeler le service REST.
  2. A l'aide de Web Process Designer, créez un service externe et détectez quelles sont les opérations prises en charge :
    1. Dans votre application de processus, sélectionnez Services > + > Service externe > Détecter un service existant puis sélectionnez le fichier de spécification OpenAPI local comme entrée. Pour plus d'informations sur la détection d'un service REST externe, voir Appel d'un service REST.
    2. Si des erreurs sont signalées pour des opérations, il n'est pas possible d'appeler ces dernières à partir d'une tâche de service. Si l'opération de service détectée à appeler peut être sélectionnée en tant qu'implémentation d'une tâche de service dans un flux de services, sachez qu'il s'agit du moyen le plus simple. Toutefois, si vous souhaitez utiliser des types autres qu'application/json, vous devez utiliser l'API JavaScript pour appeler le service.
    3. Pour trouver les informations dont vous avez besoin sur le service REST que vous souhaitez appeler, comme le nom de l'opération, les paramètres (y compris les en-têtes), les exigences de sécurité et la structure de l'objet réponse, cliquez sur l'onglet Source du Service externe pour afficher la source de spécification OpenAPI. Pour plus d'informations sur le service, consultez la configuration du serveur REST pour le service externe.
  3. Consultez le certificat serveur du service REST à appeler. En utilisant JavaScript, vous pouvez remplacer toute configuration SSL spécifiée comme faisant partie du serveur REST.
    1. Si le certificat serveur est signé par une autorité de certification publique, vous pouvez utiliser la configuration SSL prédéfinies nommée PublicInternetSSLSettings.
    2. Si le certificat serveur n'est pas signé par une des autorités de certification publiques incluses dans la configuration SSL prédéfinie, un administrateur doit créer une nouvelle configuration SSL pour ce service et importer le certificat serveur dans un nouveau magasin de clés de confiance. Pour plus d'informations sur l'administration des configurations SSL, voir Création d'une configuration SSL (Secure Sockets Layer) et Extraction de signataires à partir d'un port SSL distant.
  4. Si vous disposez déjà d'un flux de services, sélectionnez-le. Sinon, créez un flux de services en cliquant sur Services > + > Flux de services. Pour plus d'informations sur la création d'un flux de services, voir Création d'un flux de services.
  5. Dans Web Process Designer, ajoutez une tâche de script à votre flux de services.
  6. Ajoutez du code JavaScript à la tâche de script pour effectuer les actions suivantes.
    1. Créez une instance de l'objet de demande. Par exemple :
      var request = new BPMRESTRequest();
    2. Définissez les attributs de l'objet de demande comme nécessaire, tels que le nom de service externe obligatoire, le nom de l'opération, les en-têtes HTTP et les paramètres de l'opération, ainsi que les attributs facultatifs tels que les données d'identification et le nom de configuration SSL. Les attributs que vous indiquez dans l'objet de demande remplacent les valeurs correspondantes qui sont indiquées comme faisant partie du serveur REST pour le service externe dans Process Designer.
      L'objet de demande présente les attributs suivants :
      externalServiceName
      Nom du service REST. Par exemple :
      request.externalServiceName = "language-translator-v2";
      operationName
      Si le fichier de spécification OpenAPI indique un operationId pour l'opération que vous souhaitez appeler, vous devez l'indiquer comme operationName, sinon, vous devez indiquer httpMethod et path. Par exemple :
      request.operationName="checkout";
      httpMethod et path
      Si le fichier de spécification OpenAPI n'indique pas d'operationId pour l'opération, pour identifier l'opération à appeler, vous devez indiquer la méthode et le chemin HTTP au lieu de la propriété operationName. Par exemple :
      request.httpMethod="GET";
      request.path="/v1/orders";
      endpointAddress
      En option, vous pouvez remplacer le schéma, le nom d'hôte, le port et le chemin de base indiqués dans le fichier de spécification OpenAPI. Par exemple :
      request.endpointAddress = "https://localhost:9080/restBasePath";
      httpHeaders
      Objet JSON qui spécifie les en-têtes HTTP. Par exemple :
      request.httpHeaders =  {"Content-Type": "application/json", 
                              "Accept": "text/plain"};
      Pour formData :
      • S'il inclut un fichier, spécifiez le type de contenu multipart/form-data.
      • S'il n'inclut pas de fichier, spécifiez le type de contenu multipart/form-data ou application/x-www-form-urlencoded.
      parameters
      Objet JSON contenant tous les paramètres nécessaires à l'opération. Par exemple :
      request.parameters = {"priority": "high",
                            "customer": "Max", 
                            "age" : "23"};
      requestTimeout
      Temps d'attente en millisecondes d'expiration de la demande. Par exemple :
      request.requestTimeout = 2000;
      responseTimeout
      Temps d'attente en millisecondes d'expiration de la réponse. Par exemple :
      request.responseTimeout = 7200;
      username et password
      Nom d'utilisateur et mot de passe, lors de l'utilisation de l'authentification de base. Par exemple :
      request.username = "user";
      request.password = "password";
      invocationCredential
      Fournissez les données d'identification d'appel au lieu de username et password pour l'authentification de base. Par exemple :
      request.invocationCredential = "MyAuthenticationAlias";
      sslConfiguration
      Nom de la configuration SSL à utiliser. Par exemple :
      request.sslConfiguration = "MySSLConfiguration";
      Important : Transmettez les valeurs correctes requises pour que l'appel REST puisse aboutir. IBM® BPM transmet des valeurs au service REST sans les valider.
    3. Appelez la fonction tw.system.invokeREST() sur l'objet de demande, en affectant le résultat à un nouvel objet de réponse de type BPMRESTResponse(). Par exemple :
      var response = tw.system.invokeREST(request);
      Conseil : Si l'erreur suivante est générée :
      javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: 
      PKIX path building failed ...
      vous devez demander à l'administrateur de créer une configuration SSL et importer le certificat serveur, comme cela est décrit à l'étape 3.b.
    4. Traitez la réponse, selon vos besoins.
    Pour plus d'informations sur l'objet de demande BPMRESTRequest() et l'objet de réponse BPMRESTResponse, voir API JavaScript.
  7. Cliquez sur Sauvegarder ou sur Terminer la modification.