Nous développons de plus en plus de web services grâce à IWS (Integrated Web Services).
L’implémentation de ces services peut être un programme, un programme de service, ou SQL. Par ailleurs, les deux dernières solutions nous permettent d’avoir des services avec plusieurs opérations (vocabulaire SOAP) ou routes (vocabulaire REST). Quoiqu’il en soit, plusieurs actions possibles au travers d’un unique service.
La question se pose désormais à plus grande échelle des impacts sur la maintenance des programmes et programmes de service sous-jacents à des services web !
Concrètement : je modifie un programme (de service) : comment savoir s’il est exposé en tant que service web ?
Scripts fournis
IWS est fourni avec des scripts, dans le répertoire /QIBM/ProdData/OS/WebServices/bin
Ces scripts permettent d’automatiser toutes les actions possibles, autrement disponibles via l’interface d’administration :
Nous vous recommandons leur usage pour déployer vos services par exemple, de façon automatique avec vos outils.
Ces scripts sont également capables d’extraire des informations des serveurs et services !
Extraction
Pour le principe ici, un script shell qui utilise ces fonctionnalités pour lister tous les services et récupérer tous les programmes (de service) référencés ! Le résultat est stocké en BD. C’est perfectible, mais démontre le fonctionnement :
# # Extraire les références croisées web service <-> programme/programme de service # # Paramètres : bibliothèque de création du fichier export PATH=$PATH:/QIBM/ProdData/OS/WebServices/bin # créer le fichier BD pour stocker les liens db2 "create or replace table $1.wsxref (server varchar(10), service varchar(128), program varchar(128)) on replace delete rows" # Lister les serveurs sans tenir compte de l'état (started/stopped) servers=$(listWebServicesServers.sh | sed 's/(.*//' ) # Pour chaque serveur listé for server in $servers ; do # Retourver les services sans tenir compte de l'état services=$(listWebServices.sh -server $server | sed 's/(.*//') # Pour chaque service for service in $services ; do # # Retrouver les propriétés. Ne garder que l'implémentation program=$(getWebServiceProperties.sh -server $server -service $service | grep -i 'Program object path:' | sed 's/Program object path://') echo $server $service $program db2 "insert into $1.wsxref values('$server', '$service', trim('$program'))" done done
Le code est disponible ici : https://github.com/FrenchIBMi/webservices/blob/master/wsxref.sh
Une fois le script lancé (prévoyez un café le temps de l’exécution) :
Et voilà !
Vous pouvez l’appeler dans QSH, le planifier (commande QSH …), le mettre dans un CL. Et surtout intégrer le résultat dans vos outils d’analyse !