Přeskočit na hlavní obsah

Metody a procedury Web API

Publikované metody

Na rozhraní ESO9 Web API jsou publikovány tři metody.

MetodaHTTPÚčel
testGETVypíše verzi Web API, zkontroluje připojení k databázi a povolení komunikace pro zaslaný x-api-key.
getDataGET, POSTZprostředkovává hlavní komunikaci mezi aplikací třetí strany a ESO9.
getDataAsyncGET, POSTZpracuje požadavek asynchronně. Používá se pro operace, které mohou přesáhnout synchronní timeout.

Hlavičky požadavků

Metoda test

Pro úspěšné volání metody test je potřeba v hlavičce požadavku zaslat přidělený x-api-key.

Pokud je v hlavičce požadavku zaslán Content-Type pro XML nebo JSON, výsledek je vrácen v daném formátu. Pokud zaslán není, použije se výchozí formát z parametru DefContentType.

Metody getData a getDataAsync

Hlavička požadavku musí obsahovat:

HlavičkaPopis
Content-TypeDomluvený formát komunikace: application/xml nebo application/json. Jiné formáty nejsou podporovány.
x-api-keyIdentifikátor třetí strany.
x-eso9-signaturePodpis zasílané zprávy směrem do ESO9. Algoritmus výpočtu je popsaný v samostatném dokumentu X-ESO9-SIGNATURE.

Pokud některá z povinných hlaviček chybí, podpis je neplatný nebo mu vypršela časová platnost, Web API vrátí chybové hlášení.

Obecný formát požadavku

Tělo požadavku musí odpovídat formátu uvedenému v Content-Type.

XML požadavek

<data>
<vlTyp>1001</vlTyp>
<params>
<ico>27624609</ico>
</params>
</data>

Element vlTyp obsahuje domluvenou celočíselnou hodnotu, podle které ESO9 rozpozná požadovanou operaci. Element params obsahuje samotná vstupní data.

Web API kontroluje, že tělo požadavku odpovídá očekávanému formátu, elementy vlTyp a params nejsou prázdné a vlTyp je celočíselná hodnota.

JSON požadavek

{
"vltyp": 1001,
"params": [
{
"nazev": "eso"
}
]
}

Elementy vltyp a params mají stejný význam jako v XML komunikaci.

Obecný formát odpovědi

Výsledkem volání je XML nebo JSON podle použitého formátu komunikace.

XML odpověď

<result>
<id>185</id>
<vlResult>1</vlResult>
<data>
<rowSubjekt>
<nazev>ESO9 international a.s.</nazev>
<ico>27624609</ico>
<dic>CZ27624609</dic>
</rowSubjekt>
</data>
</result>

JSON odpověď

{
"id": 4,
"vlResult": 1,
"data": [
{
"nazev": "ESO9 international a.s.",
"ico": "27624609",
"dic": "CZ27624609"
},
{
"nazev": "ESO9 Slovakia s.r.o.",
"ico": "44452675",
"dic": "SK2022706521"
}
]
}

Význam základních položek:

PoložkaPopis
idID výsledku, tedy IDWS_JOURNAL.
vlResultStav výsledku požadavku.
dataVrácená data nebo chybové hlášení.

Základní hodnoty vlResult:

HodnotaVýznam
1Požadavek byl zpracován ihned a výsledek je v položce data.
0Požadavek bude zpracován později a na výsledek je potřeba se znovu dotázat podle id.
-1V zaslaných datech byla chyba a výsledek nemohl být zpracován.
-2U asynchronního volání požadovaná operace nedoběhla v časovém limitu a dál běží v databázi.

Hodnoty lze podle dohody rozšířit.

Pravidla pro getDataAsync

Metoda getDataAsync používá stejné hlavičky a stejný formát těla jako getData. Rozdíl je ve způsobu zpracování.

Každý požadavek je spuštěn v samostatném vlákně a v databázi může pokračovat i po vypršení timeoutu. Pokud požadavek nedoběhne do limitu CommandTimeoutAsync, třetí straně se vrátí informace s ID záznamu požadavku v databázi, hodnotou vlResult = -2 a informací o probíhajícím zpracování.

Příklad odpovědi při pokračujícím zpracování:

{
"id": 16,
"vlResult": -2,
"data": [
{
"error": [
{
"errorCode": "160",
"errorMessage": "Požadovaná operace nedoběhla v časovém limitu"
}
]
}
]
}

Pro zjištění výsledku se následně volá getData s vltyp = 997 a s hodnotou idws_journal vrácenou předchozím voláním.

Pokud požadavek stále běží v databázi, vrací se odpověď s informací o nedokončeném zpracování. Pokud již doběhl, vrací se uložený výsledek daného požadavku.

Uživatelská procedura spWSCall_UzivProc

Veškerá komunikace mezi ESO9 a třetí stranou probíhá na databázovém serveru. Uživatelské procedury musí mít předem definované rozhraní a jejich výsledkem je update tabulky WS_JOURNAL, kde je uložen výsledek dotazu ve formátu XML nebo JSON, stav výsledku a čas výsledku.

Uživatelské procedury se volají z hlavní procedury obecného rozhraní:

dbo.spWSCall_UzivProc
@Send_API_KEY varchar(600),
@VLTYP smallint,
@params varchar(max),
@vlFormat smallint,
@IDWS_JOURNAL int,
@IDLOGUSER int

Parametry:

ParametrPopis
@Send_API_KEYAPI key přidělené třetí straně. Identifikuje volající stranu.
@VLTYPUrčuje, jaká procedura je volaná.
@paramsVstupní data zaslaná třetí stranou.
@vlFormatTyp komunikace: 1 = XML, 2 = JSON.
@IDWS_JOURNALID záznamu v WS_JOURNAL, kam se ukládá výsledek volání procedury.
@IDLOGUSERID uživatele pro záznamy v logovací databázi, nastavené ve web.config parametrem IDLogUser.

Seznam standardních procedur

Pro vyhrazené hodnoty 1-1000 jsou od verze ESO9 6.6 postupně zapracovávány hlavní procedury. Procedury jsou zapracovávány pro XML i JSON a každá je volána vlastní procedurou, která zprostředkovává rozparsování XML nebo JSONu.

vltypAPI SQL proceduraStandardní SQL procedura
1spWSCall_TxtSubjektspTXT_SUBJEKT
2spWSCall_TxtSubjAdrspTXT_SUBJADR
3spWSCall_TxtSubjOsobaspTxt_SubjOsoba
4spWSCall_TxtSubjBUcetspTxt_SubjBUcet
5spWSCall_TxtZbozispTxt_Zbozi
6spWSCall_TxtZbozSklspTxt_ZbozSkl
7spWSCall_TxtUcetZapspTxt_UcetZap
8spWSCall_TxtHDOKspTxt_HDOK
9spWSCall_TxtUcetZap_NespSaldosptxt_UcetZap_NespSaldo
10spWSCall_TxtSDokZbozSklspTXT_SDokZbozSkl
11spWSCall_TxtArchSumUcetZapspTXT_ArchSumUcetZap
12spWSCall_TxtUdalostspTxt_Udalost
13spWSCall_TxtSDOKsptxt_SDOK
997spWSCall_GetResult-
1000spWSCall_GetPopisProcspWSCall_GetPopisProc

Podrobné XML a JSON rozhraní jednotlivých standardních procedur je uvedené na samostatné stránce Detailní rozhraní procedur. Pro nové integrace je nutné ověřit konkrétní seznam podporovaných položek pro daný vltyp.

Speciální procedury

spWSCall_GetResult

Slouží pro zjištění výsledku požadavku spuštěného přes getDataAsync.

XML:

<data>
<vlTyp>997</vlTyp>
<params>
<idws_journal></idws_journal>
</params>
</data>

JSON:

{
"vltyp": 997,
"params": [
{
"idws_journal": 16
}
]
}

spWSCall_GetPopisProc

Slouží pro zjištění popisu procedury podle jména.

XML:

<data>
<vlTyp>1000</vlTyp>
<params>
<proc_name></proc_name>
</params>
</data>

JSON:

{
"vltyp": 1000,
"params": [
{
"proc_name": "spWSCall_TxtSubjekt"
}
]
}