REST API

Upravit obsah stránky

REST obecně má mít charakter orientovaný na data, nikoli na procedury. Ve flexideo tento přístup úplně třeba není, protože pomocí HTTP protokolu a XML požadavkům je možné s daty pracovat i v jiných klientech. Celý XML protokol flexideo je defakto API orientované na data.Cílem tedy není toto nahradit. Cílem je nabídnout jednodušší API pro provozované akce.

Vstupem akce může být i jiný než SOAP formát, tj. nejen libovolné XML bez přiřazení k SOAP, ale i jiné datové obsahy, zejm. pak formát JSON.

REST umožňuje i jiné HTTPmetody, než-li je POST využívaný pro SOAP (GET, POST, PUT, DELETE) - popis všech formátů na vstupu a výstupu akcí Formáty akcí.

V implementaci REST API jde zejména o GET rozšíření, je nabízeno rozhraní pro přístupa také filtraci či řazení dat bez nutnosti zasílání HTTP/POST content. Akce je možné spouštět přes SOAP klíčový prostor flexideo v této syntaxi:

bullet

[web:]/soap/{$typVolani}[/{$nazevAkce}] (viz. retistr akcí)

Návrh REST API vychází z následujících možností:

bullet

[web:]/api/2.0/{$nazevAkce}[/param1[/param2]][?query]

Je ke zvážení, zda neumožnit i alternativupůvodního SOAP volání takto:

bullet

[web:]/api/1.0/{$typVolani}[/{$nazevAkce}] (totéž co ../soap/..)

První odlišností tedy je verzování. V kmenovém uzlu settings.mxl existujeatribut version. Slouží pro identifikaci verze dané akce, jejího buildu. REST API zavádí nový atribut api, který pokud atribut není uveden, je to chápáno jako akce verze 1.0 a pokud je uveden bude obsahovat dvě číslice oddělenétečkou. Aktuální úprava REST API je identifikována atributem api="2.0".

Zavedení verzování otevírá prostor pro budoucí standardy API (Graph QL apod).

Další odlišností je možnost parametrizace přímo v URL GETové části, kdyje žádoucí, aby bylo možné přímo do URL odkazu vložit odkaz na zdroj.

Například tak můžeme chtít pracovat pouze s daty určitého klienta, jehož ID bude definováno jako param1. Pokud tak klient bude mít ID 10023, mohla by akce pro získání základních dat klienta býtvolána tímto odkazem:

[web:]/api/2.0/client_detail/10023

Případně detail klienta za rok 2021, bude-li mít akce definovány 2 parametry:

[web:]/api/2.0/client_detail/10023/2021
Tyto parametry,jako je příklad ID klienta nebo požadovaný rok, budou do akce předávány jako její parametry. Třetí odlišností je možnost zadávat dotazy do URL parametrů za otazníkem. Filtrace dat klienta by tak mohla s využitím filtrace vypadat např. takto: [web:]/api/2.0/client_detail?filter.eq[klient]=10023&filter.eq[rok]=2021
[web:]/api/2.0/client_detail?filter.eq[klient]=10023&filter.gteq[rok]=2019

Obdobně tak by mohlo být doplněno řazenínebo stránkování (2. strana dat):

[web:]/api/2.0/client_detail?filter.eq[klient]=10023&filter.eq[rok]=2021&sort.desc=mesic&page.number=2

Kombinace dotazů jako URL parametrů za otazníkem by byla možnápouze s metodou GET, která nebude mít žádný content a také pro příp. metodu DELETE (pouze filtrace).

Metody POST a PUT pro insert a update by filtraci mít nemohly, ale mohly by mít parametry za lomítky. Bude tak možné zapsat data jednoho klientatakto:

[web:]/api/2.0/client_detail/10023

(POST) {"jmeno":"...",...}

Zachování SOAP slouží zejména pro interní protokol volání akcí. Standardní systém volání flexideo akcí nabízí totiž vícemožností a pro interní stavbu akcí je výhodnější. Zavedné REST API slouží pro snadnější integrace a rozšíření možností napojení na okolní systémy.

Parametry volání a jejich pozice

Parametry jsou i v rámci předávány stejně jako dosud, tedysystémem klíč+hodnota. Filtry, řazení a příp. stránkování pro GET (u metody DELETE jen filtrování), by byly předávány na vstup akce jako parsované části SQL dotazu.

V kmenovém uzlu action-steps v souboru settingu akce je pro REST API tvořenatribut params se středniky oddělenými názvy parametrů v pořadí, v jakém jsou zadatelné v URL volání služby. Není možné zadat např. pouze druhý nebo třetí parametr, pokud nebude zadán první. To ale souhlasí s logikou jejich obsahu. Navíc velmičasto parametry nejsou buď vůbec nebo je nutný pouze jeden a je třeba znát jeho význam.

Specifikace URL parametrů

Úplný výčet URL parametrizace pro filtrování, řazení a stránkování. Parametrizace je chápána jako podklad pro převod na SQLsyntaxi, jež bude předána jako řetězecový parametr.

URL parametrizace bude vždy chápána jako nepovinná, ale do akce bude třeba předávat jak původní znění, tak také SQL parsování verzi. V níže uvedené syntaxi je {field} nahrazováno pomocí mapování dlespec. seznamu viz. další článek.

Filtrování používá tyto možnosti:

bullet

filter.eq[{field}] možné i takto filter[{field} - operátor rovnáse

bullet

filter.neq[{field} - operátor nerovná se

bullet

filter.in[{field} - operátor IN

bullet

filter.lt[{field} - operátor menšínež

bullet

filter.gt[{field} - operátor větší než

bullet

filter.lte[{field} - operátor menší než nebo rovno

bullet

filter.gte[{field} - operátor větší než neborovno

Řazení bude nastavitelné takto:

bullet

sort.asc={field} možné i takto sort={field} - řazeno vzestupně

bullet

sort.desc={field} - řazenosestupně

Stránkování nabízí tyto možnosti:

bullet

page.size={number} - počet položek na stránce

bullet

page.number={number} - číslostránky

bullet

page.limit={number} - limit počtu stranek

Stránkování si je v implementaci realizované již na úrovni dotazu na data do databáze. Obdržená parametrizace na pozici za lomítky, tedy odkazy na zdroj jsou přiřazeny kčástem dotazů, které jsou serveru poskytnuty pro dynamickou syntézu dotazu a přípravě výchozí množiny dat.

Mapování field entit na SQL výrazy

Pro účely sestavování částí SQL dotazů sloužících k filtrování, řazení a příp. i stránkování dle URLparametrů je v souboru settings.mxl zaveden nový uzel query-parts.

Nový uzel query-parts je uveden pouze v případě, že je URL mapování v dané akcivůbec možné. Dokud není uveden, akce tuto schopnost nemá (i když má api/2.0). Vyskytuje se jako první potomek kmenového uzlu action-steps.

Pro tvorbu částí dotazu pro účely filtrace, řazení a stránkování dle URL parametrů je třebamapování SQL políček nebo jejich složených výrazů na použité názvy. Do nastavení settings.mxl v takových případech přibude uzel query-parts + uzel part (name,query, type = s/n)

Pro účely akce je třeba předávat v parametrech nejen parsovaný SQL výsledek, ale také jeho původní formu. Je zajištěna jedinečnost jmen (2 podtržítka na začátku názvuparametru).

Rozšíření struktury settings.mxl oproti interním a dalším none REST akcím - tučně vyznačené je možné rozšíření pro příklad s klientem:

...

Toto nastavení umožňuje klienta a rok zadat jak přímo v URL odkazu mezilomítky, tak také jako URL parametr filtrování, protože v settingu je uveden jak params, tak také uzel query-parts.

Příklad parametrů v nastaveních akce:

Dostupnost URL parametrů v akci

Původní, nijak neparsované obsahy URL parametrů, těch filtrovacích, řadících i těch za otazníkem jsou dostupné jakoběžné parametry akce, ve své původní formě:

bullet

_page_url="size=50&number=1"

Analogicky pak i _where_url a_sort_url:

bullet

_where_url="filter.eq[klient]=10023&filter.eq[rok]=2021"

bullet

_sort_url="sort.desc=mesic"

Hodnoty jsou třeba při tvorbě lepšíchchybových hlášek a doplňujících odkazů uvnitř odpovědí, budou-li požadovány v rámci rest metadat v body odpovědi.

Úplný výčet všech dostupných hodnot:

bullet

_where - hodnoty filtrovacíchparametrů;

bullet

_where_url - URL encoded hodnoty filtrovacích parametrů;

bullet

_sort - hodnoty parametrů pro řazení

bullet

_sort_url - URL encoded hodnoty parametrůpro řazení

bullet

_page - stránkovací parametry

bullet

_page_url - URL encoded stránkovací parametry

Kromě konfigurační settings.mxl volby default-size existuje ješte default-sort. Je-litato volba nastavena a zároveň není v URL parametrech žádná volba třídění, je doplněna a zaslána tato výchozí. Volba default-sort může být užitečná zejména při stránkování, kdy pokud není v dotazu ORDER BY nelze používat stránkovací volby.

Parsovací požadavek prodebug

Pro účely debug je k dispozici serverový parser URL požadavků jako spec. požadavek, který umožňuje využití parsovací schopnosti serveru např. takto:

url-params="filter.eq[klient]=10023&filter.eq[rok]=2021&sort.desc=mesic"/>

V response by pak mohlo být:

Pokud nebude uveden page.number, bude se ten limit prosazovat formou TOP klauzule. Bude na šabloně akce, aby tuto skutečnost rozpoznala. Neuvedený size bude řešen převzetím hodnoty z nastavení v settings.mxl (např. default-size) a teprve až pak, nebyl-li by ani zde limit stanoven, dosazením obecné hodnoty.

Atribut order - part pro řazení neobsahuje odkaz do db tabulky, ale na alias sloupce. Takže tentoje na místo atributu query v případě řazení zapsán v order.

...

Nový atribut order se může používat samostatně nebo v kombinaci s atributem query ve stejném uzlu.