Preskoči na glavno vsebino

Použitie /query v REST API

Použitie volania /query v POST requestoch

Avtor: Petr Pech

Volaním /query je možné všetky parametre a filtre, ktoré sa štandardne posielajú v URL adrese, poslať namiesto toho v tele požiadavky. V tele metódy POST tak odovzdáte úroveň detailu, stránkovanie, filtráciu aj radenie. Hodí sa to najmä pre dlhé filtre, ktoré by sa do URL nezmestili.

ℹ️ Pred použitím query odporúčame preštudovať štandardné zostavovanie URL, prípadne úvodný Ako začať s API Flexi.


Štandardné volanie

Adresa sa skladá z evidencie a názvu query s príponou formátu; všetko ostatné ide do tela požiadavky:

POST https://demo.flexibee.eu/c/demo/faktura-vydana/query.json
{ "winstrom": { ... filtry, detail, parametry } }

Možná je aj kombinácia, kedy časť parametrov zostane v URL:

POST https://demo.flexibee.eu/c/demo/faktura-vydana/query.json?use-internal-id=true&no-ext-ids=true&add-row-count=true

⚠️ Pozor na limit: pri volaní /query sa berie iba hodnota z tela požiadavky, hodnota v URL sa ignoruje. Ak chcete obmedziť počet záznamov, uveďte "limit" v tele; "limit":"0" znamená bez obmedzenia. Parameter add-row-count=true naopak v URL funguje.


Zápis detailu

Detail sa zapisuje výpočtom hodnôt — a to aj v prípade vnorených includovaných vlastností:

"detail":"custom:kod,nazFirmy,datVyst,datSplat,zbyvaUhradit,sumCelkem,stavUhrK,sumCelkemMen,mena(kod),stredisko(nazev,kod,id)"

Obdobne sa ako ďalší element zapíše aj includes, výpočtom zahrnutých evidencií oddelených čiarkou:

"includes":"/faktura-vydana/mena,/faktura-vydana/stredisko"

A rovnako aj ďalšie parametre detailu a stránkovania:

"no-ext-ids":"true","limit":"80","start":"0","@version":"1.0"


Zápis filtra

Filter sa zapisuje do okrúhlych zátvoriek rovnako ako pri štandardnom zápise do URL:

"filter":"(datSplat lt now() and ((storno eq false and (stavUhrK is null or (stavUhrK neq \"stavUhr.uhrazeno\")))))"

Filter obsahuje logické operátory and a or, prípadne ďalšie podľa dokumentácie filtrácie. Významové úvodzovky pre zápis reťazcov je nutné escapovať spätnou lomkou. Funkcia now() odovzdá dnešný dátum — vo vyššie uvedenom príklade teda filtrujeme faktúry, ktorých dátum splatnosti je nižší ako dnešný dátum a ktoré zároveň nie sú stornované ani uhradené.


Zápis radenia

Radenie sa zapisuje do hranatých zátvoriek, v poradí, v akom sa má aplikovať:

"order":["sumCelkem","sumCelkemMen","mena"]

Výstup sa teda najprv zoradí podľa celkových súm a potom podľa meny. Ak radíte len podľa jedného stĺpca, stačí:

"order":"kod"


Príklady volania

Vydané faktúry s vnorenými evidenciami

Vyfiltrujeme vydané faktúry a pre kontrolu pridáme parameter add-row-count. Faktúry získame s vlastným detailom vrátane vnorenej meny, strediska a typu dokladu; vo filtri adresujeme menu podľa ID a typ dokladu podľa kódu. Celý výsledok chceme bez externých ID a obmedzíme ho na 100 záznamov — preto je limit v tele.

POST https://demo.flexibee.eu/c/demo/faktura-vydana/query.json?add-row-count=true
{ "winstrom": {
"detail":"custom:kod,nazFirmy,datVyst,datSplat,zbyvaUhradit,storno,juhSum,sumCelkem,stavUhrK,sumCelkemMen,mena(kod),stredisko(nazev,kod,id),typDokl(typDoklK)",
"includes":"/faktura-vydana/mena,/faktura-vydana/stredisko,/faktura-vydana/typDokl",
"filter":"(kod like \"2021\" and mena eq \"31\" and typDokl eq \"code:FAKTURA\")",
"limit":"100",
"no-ext-ids":"true",
"@version":"1.0"
}}

Zápis v aplikácii Postman:

Prijaté objednávky s kontaktom na firmu

Chceme získať vlastný detail objednávky prijatej vrátane e-mailu a telefónu z vnorenej evidencie firmy. Filtrujeme objednávky s dátumom vystavenia od 1. 6. 2021 a typom dokladu OBP, výsledky radíme podľa celkovej sumy a kódu dokladu.

POST https://demo.flexibee.eu/c/demo/objednavka-prijata/query.json
{ "winstrom": {
"detail":"custom:kod,sumCelkem,varSym,typDokl,firma(email,tel)",
"limit":"0",
"filter":"(datVyst > 2021-06-01) and typDokl = \"code:OBP\"",
"includes":"/objednavka-prijata/firma",
"order":["sumCelkem","kod"],
"@version":"1.0"
}}

Zápis v aplikácii Postman:


Súvisiace

Ste s tem dobili odgovor na svoje vprašanje?