Exemples de dépannage et de test API Web
Exemples de dépannage et de test API Web
Dépannage
Enregistrement
Les journaux sont accessibles depuis l'interface ESM, via Administration → Maintenance → Journaux. De là, vous pouvez télécharger les journaux, les consulter dans un navigateur et vérifier le nombre de sessions ouvertes pour consulter les différents journaux. Trois journaux sont utiles pour déboguer les erreurs API Web :
- Pour dataCardImport com.bitmount.equipment.importing.ValidatingEntityXMLImporter
- Pour rechercher com.efecte.webservice.SearchController
- Pour les requêtes EQL
À partir des journaux, vous pouvez afficher les erreurs d’autorisation et des erreurs plus précises pour les exceptions EQL .
API Web ne renvoie aucune carte de données
API Web ne renvoie aucune carte de données, même si des cartes de données ont été créées pour le modèle que j'interroge.
Il peut s'agir d'un problème d'autorisation. Si l'utilisateur de l'API Web ne dispose pas des autorisations nécessaires pour accéder au modèle donné, search.ws ne peut pas renvoyer les cartes de données.
Recherche avec un code d'attribut inexistant
Si search.ws est utilisé avec un code d'attribut inexistant, par exemple $nam$ au lieu de $name$, API Web peut alors fournir la réponse suivante :
<?xml version="1.0" encoding="utf-8"?>
<error>
<code>efe-3001</code>
<description>Invalid search query</description>
<details>Macros should be preprocessed, not converted to HQL: $nam$</details>
</error>Cela signifie que l'attributCode $nam$ n'existe pas dans le modèle.
Recherche de cartes de données avec une faute de frappe dans la clause WHERE
Search.ws ne renvoie aucune carte de données ni erreur en cas d'erreur typographique dans l'attributeCode de la clause WHERE. Par exemple, votre requête devrait être « WHERE $ efecte_id $ = 'INC-000259' », mais l'attribut « select entity from entity where template.code='incident' AND $ efectei $='INC-000259' » est mal orthographié.
Cela donnera une réponse vide sans aucune erreur, car rien ne correspond à la condition WHERE.
Erreurs d'importation de cartes de données
<?xml version="1.0" encoding="utf-8"?>
<entity-import-report>
<start-time>04.09.2018 09:43:38</start-time>
<total-time>0,294</total-time>
<entities-handled-per-second>3,401</entities-handled-per-second>
<average-entity-handling-time>0,294</average-entity-handling-time>
<user>webapi</user>
<entities-handled>1</entities-handled>
<entities-saved>0</entities-saved>
<entities-updated>0</entities-updated>
<entities-created>0</entities-created>
<template-errors>
<template-error code="workstation">Ignoring entity</template-error>
</template-errors>
</entity-import-report>Cela peut également être dû à un manque d'autorisations sur le modèle. Vérifiez, dans Administration > Autorisations, que le rôle de l'API Web est autorisé à créer des cartes de données pour le modèle.
Exemples de tests
Les tests des requêtes API Web peuvent être facilement effectués avec un navigateur ou Curl. Il est facile de tester les requêtes search.ws dans un navigateur, surtout si celui-ci gère le XML.
Test avec le navigateur
Pour tester search.ws dans un navigateur, ajoutez /search.ws après l'URL de base de l'instance ESM. Voici un exemple de test de navigateur avec l'URL suivante :
https://localhost:8080/esm/search.ws?attributeCodes=efecte_id,subject,description,status&query=select%20entity%20from%20entity%20where%20template.code=%27incident%27

Tester avec Curl
Une option pour tester API Web est curl. Vous trouverez ci-dessous un exemple de commande curl qui exécute la même requête que l'exemple de navigateur.
curl -X GET -u "webapi:Apitest" -L https://localhost:8080/esm/search.ws?attributeCodes=efecte_id,subject,destus&query=select%20entity%20from%20entity%20where%20template.code=%27incident%27Exemple de réponse ci-dessous :
<?xml version="1.0" encoding="UTF-8" ?>
<entityset>
<entity id="19406" name="Test incident2">
<template id="2597" name="Incident" code="incident"/>
<group code="incident_management"/>
<attribute id="2612" name="Incident ID" code="efecte_id">
<value>INC-000278</value>
</attribute>
<attribute id="2623" name="Status" code="status">
<value>1 - Untouched</value>
</attribute>
<attribute id="2632" name="Subject" code="subject">
<value>Test incident2</value>
</attribute>
</entity>
</entityset>L'importation de cartes de données fonctionne de manière similaire, dans cet exemple, le XML d'incident se trouve dans le fichier importdata.xml :
curl -X POST -H "Content-Type: application/xml" -d @importdata.xml -u "webapi:Apitest" -L https://localhost:8080/esm/dataCardImport.ws?folderCode=incident_managementLa réponse devrait ressembler à l’exemple ci-dessous :
<?xml version="1.0" encoding="utf-8"?>
<entity-import-report>
<start-time>14.09.2018 10:44:48</start-time>
<total-time>0,378</total-time>
<entities-handled-per-second>2,646</entities-handled-per-second>
<average-entity-handling-time>0,378</average-entity-handling-time>
<user>webapi</user>
<entities-handled>1</entities-handled>
<entities-saved>1</entities-saved>
<entities-updated>0</entities-updated>
<entities-created>1</entities-created>
</entity-import-report>