Přeskočit na hlavní obsah

Základní funkce API

API poskytuje webové rozhraní s několika základními funkcemi/URL. Pomocí přístupu k aplikační databázi načte požadovaná data a pošle je přes HTTP(S) protokol klientovi ve formátu JSON. testovací změna.

Formát URL adresy​

Všechny funkce API mají formát URL adresy. Adresa sestává z fixní části a z části s parametry. Parametry určují, jaká data se budou z ESO9 získávat, popř. dále upřesňují jejich rozsah.

V případě, že se v URL parametrech vyskytují nepřípustné znaky, je třeba je převést tzv. URL encodingem. Viz např. urlencoder.org.

Zabezpečení​

Všechny funkce API (tj. URL adresy) jsou zabezpečeny Basic Authentication. Jméno a heslo se nastavují v konfiguračním souboru, viz kapitola Instalace a konfigurace.

Formát dat​

Všechny funkce API vrací data ve formátu JSON. Tento formát umí zpracovat všechny nástroje pro datovou analýzu či vizualizaci, ale i např. databázové systémy typu MS SQL Server.

Kořenovým elementem je vždy název požadované tabulky nebo pohledu. Jednotlivé záznamy jsou ve formátu jednorozměrného pole.

Příklad (první 2 záznamy z tabulky SUBJEKT):

{
"subjekt": [
{
"IDSUBJEKT": 208,
"KOD_SUBJEKTU": "0028",
"ICO": "00006912",
"DIC": "CZ00006912",
"SUBJ_NAZEV": "Finanční úřad",
"IDSUBJADR": 295,
"IDSUBJOSOBA": 323,
"IDSUBJBUCET": 160,
"VLSTAVSUBJEKT": 0,
"VLSUBJ_KONSOLIDACE": 0,
"VLSUBJTYPSPOL": 0,
"VLSUBJOBRAT": 0,
"VLSUBJPOCETZAM": 0,
"VLPRAVNIFORMA": 14,
"IDUZIVATEL_UPDATE": 327,
"DTUPDATE": "2018-12-17T14:53:37",
"VLPLATCEDPH": 0,
"VLNEDUVERYHODNYPLATCE": -1
},
{
"IDSUBJEKT": 219,
"KOD_SUBJEKTU": "0001",
"ICO": "27624609",
"DIC": "CZ27624609",
"SUBJ_NAZEV": "ESO9 international a.s.",
"IDSUBJADR": 365,
"IDSUBJOSOBA": 335,
"IDSUBJBUCET": 188,
"SUBJ_POZNAMKA": "Informační systémy ESO9",
"VLSTAVSUBJEKT": 0,
"SUBJEKT_WEBSITE": "www.eso9.cz",
"VLPRAVNIFORMA": 1,
"DATOVASCHRANKAID": "czxfpqh",
"VLPLATCEDPH": 2,
"VLNEDUVERYHODNYPLATCE": 0
}
]
}

Přehled funkcí​

FunkceMetodaPopis
getDataGETVrací všechna data z tabulky/pohledu
getDataWithConditionGETVrací data omezená podmínkou
getRowsCountGETVrací počet řádků
getDataPaginateGETVrací stránkovaná data
getFileGETStáhne soubor z DMS
setFilePOSTNahraje soubor do DMS

Funkce getData​

Vrací všechna data z dané tabulky nebo pohledu bez omezení.

URL:

https://{Server}/JsonAPI/Data/getData/{DataSource}
ParametrPopis
{Server}Jméno webového serveru, který hostuje API
{DataSource}Jméno tabulky nebo pohledu z ESO9, jehož data funkce vrací

Pokud používáme pro uživatelský účet přistupující k aplikační databázi oprávnění pro čtení, není třeba nic dále nastavovat. Pokud používáme oprávnění pouze pro vybrané databázové objekty, je třeba každému takovému objektu (tabulce, pohledu) nastavit oprávnění Select.

Příklad:

https://api.eso9.cz/JsonAPI/Data/getData/QSUBJEKT

Příklad vrátí všechna data z pohledu QSUBJEKT, tj. informace o subjektech (obchodních partnerech).


Funkce getDataWithCondition​

Vrací data z dané tabulky nebo pohledu omezená zadanou podmínkou.

URL:

https://{Server}/JsonAPI/Data/getDataWithCondition/{DataSource}?{Condition}
ParametrPopis
{DataSource}Jméno tabulky nebo pohledu z ESO9, jehož data funkce vrací
{Condition}Podmínka ve tvaru condition=SQL_where_condition (syntaxe T-SQL WHERE)

Příklad:

https://api.eso9.cz/JsonAPI/Data/getDataWithCondition/QHDOK_FAV?condition=UCET_OBD%3E%272020.01%27

Příklad vrátí data z pohledu QHDOK_FAV (tj. vydané faktury) omezená na účetní období větší než 2020.01 (UCET_OBD>'2020.01'). Nepřípustné znaky v URL jsou převedené URL encodingem.


Funkce getRowsCount​

Vrací počet řádků tabulky nebo pohledu.

URL:

https://{Server}/JsonAPI/Data/getRowsCount/{DataSource}
ParametrPopis
{DataSource}Jméno tabulky nebo pohledu z ESO9, počet jehož řádků funkce vrací

Příklad:

https://api.eso9.cz/JsonAPI/Data/getRowsCount/PSC

Příklad vrátí počet řádků tabulky s PSČ.


Funkce getDataPaginate​

Vrací stránkovaná data z tabulky nebo pohledu. Stránku s daty určuje její počátek a velikost. Funkce je určena pro postupné načítání rozsáhlých dat. Pro provoz v kontejneru jediný způsob, jak postupně načíst rozsáhlejší data.

URL:

https://{Server}/JsonAPI/Data/getDataPaginate/{DataSource}?fromRow=x&rows=y
ParametrPopis
{DataSource}Jméno tabulky nebo pohledu z ESO9, jehož data funkce vrací
fromRowČíslo řádku, odkud se mají data číst
rowsPočet řádků, které má funkce vrátit

Příklad:

https://api.eso9.cz/JsonAPI/Data/getDataPaginate/PSC?fromRow=2000&rows=300

Příklad vrátí 300 řádků tabulky s PSČ počínaje řádkem č. 2000.


Funkce getFile​

Vrací soubor z DMS na základě jeho unikátního identifikátoru GUID.

URL:

https://{Server}/JsonAPI/File/getFile/{fileGUID}
ParametrPopis
{fileGUID}Identifikátor (GUID) souboru z DMS ESO9, který chceme stáhnout

Příklad:

https://api.eso9.cz/JsonAPI/File/getFile/44C985A2-48F1-4DE0-8B2C-8CFD314E1747

Příklad vrátí soubor s daným GUID identifikátorem.


Funkce setFile​

Uloží soubor do DMS a spustí nad ním uživatelskou proceduru. Na rozdíl od všech předchozích funkcí se nejedná o čtení dat (HTTP GET), ale o zápis (HTTP POST).

Soubor se zakládá pouze do dokumentové databáze do tabulky ESO9DOC; k souboru se tedy nezakládá záznam do aplikační databáze (do navázané tabulky DOKUMENT). Mechanismus je určen primárně pro jednoduché souborové importy, kdy po zpracování obsahu souboru tento zrušíme.

Nastavení oprávnění​

Protože funkce zapisuje do DMS ESO9, je třeba Windows účtu (resp. SQL účtu), pod nímž API přistupuje k dokumentové databázi, nastavit minimálně role db_datareader a db_datawriter.

Pokud se po uložení souboru volá uživatelská procedura, je třeba příslušné roli nastavit k této proceduře oprávnění Execute.

Upload souboru​

Pro upload souboru do DMS se používá formát MultiPart Form Data. Soubor se odesílá v těle HTTP requestu, zatímco případné další parametry se posílají na URL. V těle requestu je povinná jediná MultiPart část s názvem file.

URL:

https://{Server}/JsonAPI/File/setFile?userDBProcedure={spProcedure}
ParametrPopis
{spProcedure}Jméno uživatelské procedury (nepovinné), která se zavolá po úspěšném uložení souboru. Jediným vstupním parametrem je GUID souboru.

Příklad uživatelské procedury:

/*
Procedura volaná PO importu souboru do DMS přes JSON API
*/
CREATE OR ALTER PROCEDURE dbo.spUploadFile
@FILEGUID uniqueidentifier
AS
Set Nocount ON
-- výkonná část procedury
RETURN 0
GO

Příklad HTTP requestu:

POST /Data/setFile?userDBProcedure=spUploadFile HTTP/1.1
Authorization: Basic RVNPOUV4Y2VsQVBJOkhlc2xvMTIz
Content-Type: multipart/form-data; boundary=---boundary123

-----boundary123
Content-Disposition: form-data; name="file"; filename="Invoice2021_346.pdf"
<binární obsah souboru>
-----boundary123--

Struktura MultiPart requestů je popsána např. na swagger.io.

Automatizace volání s cURL​

cURL je řádková utilita pro přenos dat z/na server pomocí protokolu HTTP. Pomocí tohoto nástroje lze jednoduše zavolat jakékoli webové API.

tip

U metod typu GET s výstupem ve formátu JSON je zpravidla lepší použít jako klienta MS Excel (viz Napojení na MS Excel).

Příklad – import souboru​

Upload a import souboru z příkazové řádky (volá API funkci setFile na serveru Win2019, po uploadu souboru API.pdf spustí uživatelskou proceduru spUploadFile):

curl -X POST "https://win2019/ESO9JsonAPI/File/setFile?userDBProcedure=spUploadFile" \
--user ESO9ExcelAPI:Heslo123 \
-H "accept: */*" \
-H "Content-Type: multipart/form-data" \
-F "file=@API.pdf;type=application/pdf" \
--insecure

Příklad – hromadné stažení souborů z DMS​

Automatické stažení více souborů z DMS z příkazové řádky pomocí skriptu v PowerShellu. Předpokládejme, že seznam souborů ke stažení máme definovaný v pohledu QDOKUMENTOBR:

###################################################################
# Stažení souborů z příkazové řádky z aplikace ESO9 pomocí JSON API
###################################################################

# Definice proměnných
$username = "ESO9ExcelAPI"
$password = "Heslo123"
$baseDirectory = "c:\Temp\curl-8.3.0_1-win64-mingw\bin\"
$outputFile = "$baseDirectory\FILE.jpg"

# Dočasné umístění pro JSON soubor s odpovědí ze serveru
$jsonFile = "$baseDirectory\response.json"

# Stažení JSON dat
$url = "https://win2019-tu2/ESO9JSONAPI/Data/getData/QDOKUMENTOBR"
$curlCommand = "curl.exe -X GET `"$url`" --user `"$username`:$password`" --header `"Accept: */*`" -o `"$jsonFile`" --insecure"
Invoke-Expression $curlCommand

# Čtení a parsování JSON souboru
$jsonData = Get-Content -Raw -Path $jsonFile | ConvertFrom-Json

# Cyklus přes všechny soubory ke stažení
$url = "https://win2019-tu2/ESO9JSONAPI/File/getFile"

foreach ($doc in $jsonData.QDOKUMENTOBR) {
$fileGuid = $doc.DOKUMENTFILEGUID
$fileName = $doc.FILENAME

# Sestavení URL pro stažení jednoho souboru
$downloadUrl = "$url/$fileGuid"

# Cesta k uložení jednoho souboru
$outputFile = "$baseDirectory\$fileName"

# Stažení souboru pomocí cURL
$curlDownloadCommand = "curl.exe -X GET `"$downloadUrl`" --user `"$username`:$password`" --header `"Accept: */*`" -o `"$outputFile`" --insecure"
Write-Output "File URL: $downloadUrl"
Invoke-Expression $curlDownloadCommand

Write-Output "Downloaded: $fileName"
}