Přeskočit na hlavní obsah

Použití /query v REST API

Využití volání /query v POST requestech

Autor: Petr Pech

Voláním /query lze všechny parametry a filtry, které se standardně posílají v URL adrese, poslat místo toho v těle požadavku. V těle metody POST tak předáte úroveň detailu, stránkování, filtraci i řazení. Hodí se to zejména pro dlouhé filtry, které by se do URL nevešly.

ℹ️ Před použitím query doporučujeme prostudovat standardní sestavování URL, případně úvodní Jak začít s API Flexi.


Standardní volání

Adresa se skládá z evidence a názvu query s příponou formátu; vše ostatní jde do těla požadavku:

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

Možná je i kombinace, kdy část parametrů zůstane 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: u volání /query se bere pouze hodnota z těla požadavku, hodnota v URL se ignoruje. Chcete-li omezit počet záznamů, uveďte "limit" v těle; "limit":"0" znamená bez omezení. Parametr add-row-count=true naopak v URL funguje.


Zápis detailu

Detail se zapisuje výčtem hodnot — a to i v případě vnořených includovaných vlastností:

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

Obdobně se jako další element zapíše i includes, výčtem zahrnutých evidencí oddělených čárkou:

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

A stejně tak další parametry detailu a stránkování:

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


Zápis filtru

Filtr se zapisuje do kulatých závorek stejně jako při standardním zápisu do URL:

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

Filtr obsahuje logické operátory and a or, případně další podle dokumentace filtrace. Významové uvozovky pro zápis řetězců je nutné escapovat zpětným lomítkem. Funkce now() předá dnešní datum — ve výše uvedeném příkladu tedy filtrujeme faktury, jejichž datum splatnosti je nižší než dnešní datum a které zároveň nejsou stornované ani uhrazené.


Zápis řazení

Řazení se zapisuje do hranatých závorek, v pořadí, ve kterém se má aplikovat:

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

Výstup se tedy nejprve seřadí podle celkových částek a poté podle měny. Řadíte-li jen podle jednoho sloupce, stačí:

"order":"kod"


Příklady volání

Vydané faktury s vnořenými evidencemi

Vyfiltrujeme vydané faktury a pro kontrolu přidáme parametr add-row-count. Faktury získáme s vlastním detailem včetně vnořené měny, střediska a typu dokladu; ve filtru adresujeme měnu podle ID a typ dokladu podle kódu. Celý výsledek chceme bez externích ID a omezíme jej na 100 záznamů — proto je limit v těle.

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 aplikaci Postman:

Přijaté objednávky s kontaktem na firmu

Chceme získat vlastní detail objednávky přijaté včetně e-mailu a telefonu z vnořené evidence firmy. Filtrujeme objednávky s datem vystavení od 1. 6. 2021 a typem dokladu OBP, výsledky řadíme podle celkové částky 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 aplikaci Postman:


Související

Dostali jste odpověď na svou otázku?