Przykłady rozwiązywania problemów i testowania API sieci Web
Przykłady rozwiązywania problemów i testowania API sieci Web
Rozwiązywanie problemów
Wycięcie lasu
Logi można znaleźć w interfejsie użytkownika ESM, w sekcji Administracja Konserwacja Logi. Z tego miejsca można pobrać logi, wyświetlić je w przeglądarce i sprawdzić liczbę otwartych sesji, aby wyświetlić poszczególne logi. Istnieją trzy logi przydatne do debugowania błędów API :
- Dla dataCardImport com.bitmount.equipment.importing.ValidatingEntityXMLImporter
- Do wyszukiwania com.efecte.webservice.SearchController
- W przypadku zapytań EQL com.efecte.persistence.search.eql.EqlEngine
W logach można przeglądać błędy uprawnień i bardziej szczegółowe błędy dotyczące wyjątków EQL .
API sieci Web nie zwraca żadnych kart danych
API sieci Web nie zwraca żadnych kart danych, chociaż dla szablonu, który odpytuję, zostały utworzone karty danych.
Może to być problem z uprawnieniami. Jeśli użytkownik interfejsu API sieci Web nie ma uprawnień do danego szablonu, search.ws nie może zwrócić kart danych.
Wyszukiwanie z nieistniejącym kodem atrybutu
Jeśli search.ws zostanie użyty z nieistniejącym kodem atrybutu, np. $nam$ zamiast $name$, w takim przypadku interfejs API może zwrócić następującą odpowiedź:
<?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>Oznacza to, że kod atrybutu $nam$ nie istnieje w szablonie.
Przeszukiwanie kart danych z literówką w klauzuli WHERE
Search.ws nie zwróci żadnych kart danych ani błędów, jeśli w kodzie atrybutu klauzuli WHERE występuje literówka. Na przykład zapytanie powinno brzmieć „WHERE $ efecte_id $ = 'INC-000259'”, ale w zapytaniu „select entity from entity where template.code='incident' AND $ efectei $='INC-000259'” występuje błąd w atrybucie.
Spowoduje to pustą odpowiedź bez błędów, ponieważ nic nie spełnia warunku WHERE.
Błędy importu DataCard
<?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>Może to być również spowodowane brakiem uprawnień do szablonu. Sprawdź w Administracja -> uprawnienia, czy rola API internetowego pozwala na tworzenie kart danych do szablonu.
Przykłady testowania
Testowanie żądań API webowego można łatwo przeprowadzić za pomocą przeglądarki lub curl. W przeglądarce łatwo jest testować żądania search.ws, zwłaszcza gdy przeglądarka obsługuje XML.
Testowanie za pomocą przeglądarki
Aby przetestować search.ws w przeglądarce, dodaj /search.ws po adresie URL instancji ESM. Poniżej znajduje się przykład testowania w przeglądarce z następującym adresem URL:
https://localhost:8080/esm/search.ws?attributeCodes=efecte_id,subject,description,status&query=select%20entity%20from%20entity%20where%20template.code=%27incident%27

Testowanie z Curl
Jedną z opcji testowania API internetowego jest curl. Poniżej znajduje się przykładowe polecenie curl, które wykonuje to samo zapytanie, co przykład w przeglądarce.
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%27Przykładowa odpowiedź poniżej:
<?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>Importowanie kart danych działa w podobny sposób, w tym przykładzie kod XML incydentu znajduje się w pliku 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_managementOdpowiedź powinna wyglądać mniej więcej tak, jak na przykładzie poniżej:
<?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>