Cegid XRP Ultimate | I3 Actualisé le 06/10/2022 |
|||
Fondations | |||
Utilisation des services REST |
Procédure de connexion aux WebServices |
Swagger |
Avec l'installation des services REST vient l'installation de Swagger, un outil (http://swagger.io/) qui permet de visualiser les méthodes exposées, de connaître les noms, formats, structures, description des paramètres attendus par chacune de ces méthodes. Swagger permet de réaliser de façon assez simple le test de ces services. Cet outil sera largement utilisé et commenté dans cette documentation. |
Principe de connexion |
On utilise un système de connexion basé sur des notions d'accessToken et de refreshToken. Le principe est le suivant : - Lors de la première utilisation, il faut s'authentifier en passant un couple utilisateur/mot de passe. En retour, deux jetons sont fournis, un accessToken et un refreshToken. La durée de vie de l'accessToken est aussi retournée. - Lors de chaque demande de service, il faut impérativement passer l'accessToken. - Si l'accessToken est périmé, il faut faire une demande de renouvellement. Pour cela, il faut refaire une demande d'authentification, mais en passant le refreshToken. - Si le refreshToken est périmé, il faut refaire une demande d'authentification en passant de nouveau le couple utilisateur/mot de passe. Coté Client, il faut donc stocker le refreshToken et l'accessToken. |
Exemple en mode "cookie" |
![]() ![]() |
Exemple en mode "header" |
![]() |
Qu'est-ce qui est retourné ? |
Tous les WebServices fonctionnels retournent un objet de type SvcResponse. Ce dernier contient les propriétés suivantes : - status : donne un statut fonctionnel de l'appel ; - errorsCodeList : liste des codes erreurs fonctionnelles rencontrées ; - errorsTxtList : liste des messages d'erreurs ; - errorCause : exception détectée ; - stackTrace : trace complète de l'exception ; - dpc : signale si la fonction utilisée est dépréciée ; - payload : objet générique, donc la description doit être documentée pour chaque WebService. |
Verbes http, path, noms des services |
On n'utilise pas de verbe dans le nom du WebService. C'est la méthode http qui va piloter la fonction. Le nom du service = nom de la ressource gérée, toujours au pluriel, par exemple purchaseOrders.
A noter : On ne proposera pas plusieurs méthodes de delete, une du type purchaseOrders/{transaction} et une autre du type purchaseOrders/indexedBy ... Dans ce cas, on passera plutôt par la seconde. Même principe pour les méthodes de recherche (GET). Certaines parties clientes n'ont que deux verbes dans leur vocabulaire: GET et POST. Dans ce cas, il leur faudra utiliser un en-tête http normalisé pour préciser le verbe : X-HTTP-Method-Override. Par exemple, pour une action DELETE, appel du service avec une méthode POST mais passer X-HTTP-Method-Override=DELETE. |
Généralités sur les recherches |
Critères complexes |
Dans le cas de recherche de type .../search, chaque champ peut recevoir un critère, et il peut être "complexe", c'est-à-dire contenir un "%" pour faire du "like", des &&, des >> (Cf. mode recherche dans l'interface utilisateur). |
Types numériques |
Les numériques sont gérés de façon légèrement différente et ne sont pas affectables directement. Un numérique de type "Long" possèdera deux propriétés "searchCriteria" et "longValue". Un numérique de type "BigDecimal" possèdera deux propriétés "searchCriteria" et "decimalValue". La zone "searchCriteria " peut recevoir de l'alphanumérique et est utilisée pour passer des critères de recherche (par exemple ">1234"). Les zones "longValue" et "decimalValue" ne reçoivent que du type numérique et sont utilisées pour affecter des valeurs. |
Généralités sur les insertions et mises à jour |
Valeurs nulles |
Afin d'éviter d'être trop verbeux, les propriétés, dont les valeurs seront nulles, seront systématiquement ignorées et ne seront donc pas retournées. |
Service de lancement d'un traitement |
Pour lancer un traitement, le service à utiliser est (POST) /api/foundations/jobs. Le JSON en entrée est basé sur le modèle suivant : { "mnemonic": "string", // mnémonique du job à lancer "waitForResult": false // mode (attente du résultat ou non) "maxTimeWaitInSeconds": 0, // attente maximale "transactionSequence": "string", // numéro de séquence dans un enchaînement "execType": "string", // type d'exécution (C : différée, E: immédiat) "JobParameters": [ // tableau de critères { "parameterName": "string", "parameterValue": "string" } ] } Ce service permet de lancer un traitement batch, et propose deux modes de fonctionnement. |
Mode "fire and forget" |
Dans ce mode, le service lance le job qui lui retourne immédiatement toutes les informations connues du job au moment du lancement (toutes les informations présentes dans la consultation des travaux et dans le compte rendu des travaux). C'est le mode par défaut. Exemple, lancement de l'édition des journaux (EJRN) : { "mnemonic": "EJRN", "execType": "E", "JobParameters": [ { "parameterName": "DATECPTD", "parameterValue": "20170101" }, { "parameterName": "DATECPTF", "parameterValue": "20170101" }, { "parameterName": "SECNUMD", "parameterValue": "." }, { "parameterName": "SECNUMF", "parameterValue": "ZZZZZZ" } ] } |
Mode "wait for result" |
Dans ce mode, le service lance le job, attend (pendant un délai maximum défini dans l'appel) que celui-ci se termine, puis le job lui retourne toutes les informations connues du job au moment du lancement (toutes les informations présentes dans la consultation des travaux et dans le compte rendu des travaux). Exemple, lancement de l'édition des journaux (EJRN) : { "mnemonic": "EJRN", "execType": "E", "waitForResult": true, "maxTimeWaitInSeconds": 120, "JobParameters": [ { "parameterName": "DATECPTD", "parameterValue": "20170101" }, { "parameterName": "DATECPTF", "parameterValue": "20170101" }, { "parameterName": "SECNUMD", "parameterValue": "." }, { "parameterName": "SECNUMF", "parameterValue": "ZZZZZZ" } ] } |
Retour |
En retour, on obtient un objet de type SvcResponse dont le payload contient : - Toutes les propriétés non nulles du job (CJOB) ; - Dans la propriété "children", on retrouve un tableau d'objets contenant toutes les propriétés non nulles des comptes rendus des travaux (GTCJCR). |
Récupération des informations des jobs (CJOB/GTCJCR) |
C'est la méthode GET /api/foundations/jobsInformation/{jobNumber} Exemple : http://localhost:8080/iacqws/rest/api/foundations/jobsInformation/358931 Le retour est équivalent à celui du service POST. |
Récupération du fichier résultat d'un job |
GET /api/foundations/jobFileResult/{jobNumber}?type= Exemple : http://localhost:8080/iacqws/rest/api/foundations/jobFileResult/359803?type=JOB_FILE_RESULT En retour : fichier résultat sous forme de stream, avec le nom du fichier dans le header Content-Disposition ?attachment; filename=nom du fichier lu |
GED |
Ecriture |
POST /api/foundations/documentsReferencing Permet d'insérer un document en GED en fournissant le stream à uploader en entrée. |
Suppression |
DELETE /api/foundations/documentsReferencing Supprime le document passé en entrée. |
WebServices "LEGACY" |
Il s'agit d'une mise à disposition et d'une adaptation de fonctions de plus bas niveau qui étaient présentes dans les services SOAP. |