Aujourd'hui, les services web sont indispensables dans le monde informatique. Ils sont utilisés partout, même là où on s'y attend le moins, et ils rendent la vie bien plus facile.
Que sont les services web ?
Un service web peut être décrit comme une interface d'un composant d'application. Celle-ci est accessible par des protocoles web et permet d'accéder à Internet depuis un client (ex. une application ou une application web) pour demander un service ou une prestation à un service (web). Ils facilitent beaucoup l'interaction entre les différentes applications. La communication du service web se fait par la transmission de formats de fichiers lisibles par machine tels que XML et JSON. Cela garantit que cette communication est conforme entre les différentes applications et qu'aucune règle distincte ne doit être convenue pour chaque connexion entre deux applications. Les services web sont disponibles sur un réseau, ce qui rend donc une connexion réseau nécessaire.
Services web et IBM I
Les services web étant désormais un élément indispensable de la vie quotidienne, IBM ne pouvait pas être en reste. IBM prend également en charge les services web sur ses serveurs IBM i. Un serveur IBM i peut à la fois communiquer avec des services web via l'Internet et offrir lui-même des services web.
Accéder aux services web
L'accès aux services web peut se faire de plusieurs façons sur votre serveur IBM i. La première façon consiste à contacter ces services par SQL. Si nous voulons utiliser cette méthode, le service web sera contacté par une instruction SQL. La réponse sera ensuite renvoyée en format JSON ou XML. Vous pouvez alors utiliser différentes fonctions SQL pour traiter ces données.
Cela facilite les tests, car vous pouvez exécuter cette instruction SQL à l'avance et vous ne les voyez pas seulement lorsque vous exécutez le programme dans lequel vous les avez traitées.
Une deuxième option consiste à utiliser les services web intégrés du client. Vous pouvez alors accéder aux services web par différentes procédures C. Vous pouvez remplir la chaîne de requête avec un programme RPGLE et traiter la réponse JSON ou XML dans un programme SQL RPGLE. La gestion des erreurs peut également être effectuée ici via des procédures C. Vous avez besoin d'au moins quatre procédures C différentes pour effectuer un appel de service web et cela peut être un piège si vous n'êtes pas très familiarisé avec les procédures C.
La dernière méthode consiste à contacter des services web par des méthodes Java.
Vous pouvez le faire en écrivant vos propres programmes Java. Ce framework permet de traiter la réponse XML ou JSON. Ce contexte se charge alors de traiter la réponse XML ou JSON. Pour faciliter l'accès, vous pouvez ensuite écrire un programme RPG wrapper service relatif au code Java. Vous pouvez le faire pour tout type de service web et c'est particulièrement utile si une option spécifique n'est pas encore présente dans les fonctions SQL.
Il est conseillé de choisir la technique à utiliser en fonction de vos connaissances du langage de programmation nécessaire et de vos préférences personnelles. Il est toutefois recommandé de l'essayer d'abord par les fonctions SQL. Celles-ci fonctionnent rapidement et vous pouvez voir vos résultats immédiatement sans avoir à écrire beaucoup de code.
Offrir des services web
Vous pouvez également proposer des services web via votre serveur IBM I.
Vous pouvez le faire avec l'Integrated Web Services Server sur le serveur IBM I ou avec le CGI (Common Gateway Interface).
Vous pouvez configurer des services web et des API REST avec IWS Soap. Cela se fait par le biais d'un assistant GUI pratique qui vous guide à travers toutes les étapes de la configuration et du déploiement du service. Le traitement est alors effectué par un programme de service RPGLE ou une instruction SQL. Vous n'avez pas besoin de JSON ou XML dans RPGLE ou SQL et les paramètres de requête nécessaires peuvent être directement liés via l'assistant aux paramètres RPGLE ou SQL.
Via CGI, vous pouvez aussi configurer à la fois des services web soap et des apis rest. Le traitement est exécuté par un programme RPGLE. Il existe un assistant pour la configuration du serveur HTTP (pour lier un programme à une ressource). La requête JSON ou XML complète est disponible dans le programme RPGLE.
Il vaut mieux d'essayer d'utiliser d'abord l'IWS et de n'utiliser les CGI que si les limitations ne permettent pas l'IWS, si la demande/la réponse est trop complexe ou n'est pas JSON/XML, si le client WS décide de la demande/la réponse ou si vous avez besoin d'une journalisation détaillée et d'informations sur les erreurs.
Nouvelles méthodes d'adressage des services web
Maintenant, je voudrais encore vous parler des nouveaux développements des services web sur IBM i.
Dans le passé, tous les appels étaient effectués par Systools library. Depuis septembre 2021, de nouvelles fonctionnalités ont été introduites à cet effet. Celles-ci sont reprises dans Qsys2 Library. Ces fonctionnalités utilisent des API de transport http au lieu d'appels Java. Elles sont plus performantes et ont une « empreinte » plus petite.
Ces nouvelles fonctionnalités gèrent les certificats SSL différemment et prennent en charge le système de cryptage TLS.
Ces nouvelles fonctionnalités utilisent la configuration système par défaut certificate store, qui n'existe pas par défaut. Si vous choisissez de faire en sorte que votre application s'appuie sur les certificats de JVM, vous pouvez utiliser un script SQL qui se trouve dans la documentation pour copier le trust store de JVM vers le trust store du système. Sans ce nouveau trust store, il n'est pas possible d'exécuter des fonctionnalités HTTPS car vous ne disposez pas des certificats appropriés. Vous devez configurer ce trust store 1x pour votre serveur IBM I, puis vous pouvez utiliser les fonctions HTTPS sans aucun problème si vous transmettez le trust store nouvellement créé avec ces paramètres.
Il faut aussi faire attention à l'ordre des différents paramètres car celui-ci diffère des fonctions de systools. Vous pouvez facilement résoudre ce problème en précisant de quel paramètre il s'agit pour chaque paramètre, par exemple URL => 'https://someurl.com', OPTIONS => {options JSON}, REQUEST_DATA => 'data-in-JSON-format' . Si vous utilisez cette notation, vous voyez immédiatement quel paramètre est impliqué et l'ordre n'a pas d'importance.
Il y a aussi beaucoup de nouvelles options différentes comme en-têtes. Contrairement aux anciennes fonctionnalités HTTP, l'en-tête doit toujours être fourni en format JSON, vous ne pouvez donc plus fournir d'en-tête en format XML.