Web API: vianmääritys ja testiesimerkit
Web API: vianmääritys ja testiesimerkit
Vianmääritys
Lokitiedostot
Lokit löytyvät ESM:n käyttöliittymästä kohdasta Administration – Maintenance – Logs. Täältä on mahdollista ladata lokeja, tarkastella lokeja selaimessa ja tarkistaa, kuinka monta avointa istuntoa eri lokien tarkasteluun on. Web API -virheiden vianmäärityksen kannalta hyödyllisiä lokeja on kolme:
- dataCardImportia varten com.bitmount.equipment.importing.ValidatingEntityXMLImporter
- hakua varten com.efecte.webservice.SearchController
- EQL:ää varten queriescom.efecte.persistence.search.eql.EqlEngine
Lokeista näette käyttöoikeusvirheet ja tarkemmat virheet EQL-poikkeuksille.
Web API ei palauta yhtään tietokorttia
Web API ei palauta yhtään tietokorttia, vaikka kyselemääni mallipohjaan on luotu tietokortteja.
Kyse voi olla käyttöoikeusongelmasta. Jos web api -käyttäjällä ei ole kyseisen mallipohjan käyttöoikeuksia, search.ws ei voi palauttaa tietokortteja.
Haku olemattomalla attributeCodella
Jos search.ws-palvelua käytetään olemattomalla attributeCodella, esim. $nam$ oikean $name$ sijaan, web API voi antaa seuraavan vastauksen:
<?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>Tämä tarkoittaa, ettei attributeCode $nam$ ole olemassa mallipohjassa.
Tietokorttien haku, kun WHERE-lausekkeessa on kirjoitusvirhe
Search.ws ei palauta tietokortteja eikä virheitä, jos WHERE-lausekkeen attributeCodessa on kirjoitusvirhe. Esimerkiksi kyselynne pitäisi olla “WHERE $efecte_id$ = ‘INC-000259’ ”, mutta kyselyssä on väärin kirjoitettu attribuutti “select entity from entity where template.code='incident' AND $efectei$='INC-000259' ”
Tämä antaa tyhjän vastauksen ilman virheitä, koska mikään ei täsmää WHERE-ehtoon.
DataCardImport-virheet
<?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>Tämä voi johtua myös puutteellisista mallipohjan käyttöoikeuksista. Tarkistakaa kohdasta Administration -> permissions, että web api -roolilla on oikeus luoda tietokortteja mallipohjaan.
Testiesimerkit
Web API -pyyntöjen testaaminen onnistuu helposti selaimella tai curlilla. Selaimessa search.ws-pyyntöjen testaaminen on helppoa, erityisesti kun selain osaa käsitellä xml:ää.
Testaaminen selaimella
Testataksenne search.ws-palvelua selaimessa, lisätkää /search.ws ESM-instanssin perus-URL-osoitteen perään. Alla on kuva selaintestauksesta seuraavalla URL-osoitteella:
https://localhost:8080/esm/search.ws?attributeCodes=efecte_id,subject,description,status&query=select%20entity%20from%20entity%20where%20template.code=%27incident%27

Testaaminen curlilla
Yksi vaihtoehto Web API:n testaamiseen on curl. Alla on esimerkki curl-komennosta, joka tekee saman kyselyn kuin selainesimerkki.
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%27Esimerkkivastaus alla:
<?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>Tietokorttien tuonti toimii samalla tavalla; tässä esimerkissä häiriön xml on importdata.xml-tiedostossa:
curl -X POST -H "Content-Type: application/xml" -d @importdata.xml -u "webapi:Apitest" -L https://localhost:8080/esm/dataCardImport.ws?folderCode=incident_managementVastauksen pitäisi olla suunnilleen alla olevan esimerkin kaltainen:
<?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>
Table of Contents