Používání REST API ABRA Flexi otevírá široké možnosti, jak systém integrovat s dalšími aplikacemi a automatizovat běžné procesy. Aby však integrace fungovala spolehlivě a efektivně, je potřeba řídit se určitými pravidly a osvědčenými postupy. Správný přístup ušetří čas vývojářům, sníží zátěž systému a zabrání zbytečným chybám při práci s daty.
V tomto článku se zaměříme na doporučené best practices, které vám pomohou API využívat naplno – od optimalizace dotazů, správného stránkování nebo strategie opakování požadavků, až po práci s chybovými kódy a jejich pochopení. Dozvíte se také, jak předejít duplicitám, jak pracovat s limity a proč je důležité myslet na bezpečnost a konzistenci dat už při návrhu integrace.
Cílem je nejen „získat data“, ale udělat to efektivně - s ohledem na výkon systému, bezpečnost a spolehlivost celé integrace.
Autentizace a bezpečnost
Bezpečná autentizace
Autentizace je základním prvkem bezpečnosti při práci s REST API. Pokud není nastavena správně, může dojít k úniku citlivých dat nebo k neoprávněnému přístupu do systému. Proto je nutné používat bezpečné metody přihlášení a přenosu dat a vyhnout se zastaralým či rizikovým postupům, které mohou bezpečnost celé integrace ohrozit.
Využívejte bezpečné metody autentizace.
Veškerou komunikaci provádějte vždy přes HTTPS, aby byla data při přenosu šifrovaná.
Nikdy neposílejte hesla v URL (jsou viditelná v logech a historii prohlížeče).
Používat pouze API uživatele se správným nastavením práv. Ověřte si, že přístupové údaje mají jen taková oprávnění, která jsou skutečně potřeba (princip minimálních oprávnění).
Bezpečné zacházení s přihlašovacími údaji
Přístupové údaje (uživatelská jména, hesla, API tokeny) jsou klíčem k vašim datům. Pokud se dostanou do nepovolaných rukou, může dojít k vážnému bezpečnostnímu incidentu. Proto je nutné s nimi pracovat maximálně opatrně a řídit se osvědčenými postupy, které riziko úniku minimalizují.
Nikdy neukládejte přihlašovací údaje přímo v kódu (hard-coding). Používejte konfigurační soubory nebo systém pro správu tajemství (Secrets Manager, Vault).
Nesdílejte tokeny ani hesla v e-mailech nebo chatech, kde by mohly být zachyceny.
Rotujte tokeny a hesla pravidelně a omezte jejich dobu platnosti, pokud to systém umožňuje.
Ukládejte citlivé údaje bezpečně – například šifrovaně v databázi nebo v zabezpečeném úložišti.
Používejte oddělené účty pro testovací a produkční prostředí, aby nedošlo k záměně.
Optimalizace dotazů a efektivní práce s daty
Cílem není „stáhnout všechno“, ale rychle získat přesně to, co potřebujete, s minimální zátěží pro síť i server. Přemýšlejte o tom, jak data používáte: co opravdu zobrazíte, jak často se mění, zda je musíte načíst hned, nebo lze část předpočítat či uložit do cache. Dobře navržené dotazy a tok dat zkracují odezvu, šetří limity API a zvyšují stabilitu celé integrace.
Dotazujte se jen nutná pole – omezte výběr na konkrétní sloupce (úroveň detailu); menší payload = nižší latence.
Používejte filtry a stránkování – přenášejte jen relevantní záznamy (filtrace).
Stránkování - dotazujte se na záznamy v dávkách (stránkování).
Batch operace - je efektivnější poslat jednu hromadnou dávku než stovky samostatných požadavků
Caching odpovědí – ukládat si výsledky často používaných dotazů (číselníky a málo měnící se seznamy)
Changes API a Webhooks
Ne všechna data musíte stahovat znovu – efektivnější je odebírat jen změny. K tomu slouží změnové feedy (Changes API) a push notifikace (webhooky). Changes API je ideální pro spolehlivou delta synchronizaci řízenou klientem (polling + kurzor), webhooky zase pro rychlou reakci na události bez zbytečného dotazování. V praxi je často nejlepší oba přístupy kombinovat.
Práce s delta exportem
Místo stahování celé agendy při každé synchronizaci je lepší získat jen to, co se opravdu změnilo. Delta export výrazně šetří přenosy dat, snižuje zátěž API i databáze a urychluje integraci – obzvlášť u větších agend nebo při pravidelném reportingu.
Používejte pole
lastUpdate
pro načtení jen nových či změněných záznamů.V BI napojeních, často pro účetní reporty stahujte data inkrementálně, ne celou historii.
Ukládejte si poslední čas synchronizace a od něj načítejte pouze delta změny.
Limity a zátěž
Paralelní dotazy
Při práci s REST API nespouštějte více stejných dotazů najednou. Pokud se to "přežene", systém je zahlcený a výsledkem bývá spíše zpomalení nebo chybové odpovědi. Příliš velké zahlcení v poslední fázi blokujeme a odblokování je zapotřebí případně řešit s naším supportem.
Proto je dobré s paralelními dotazy pracovat opatrně a volání rozkládat chytře v čase.
Shrnuto bodově:
Nevytvářejte lavinu paralelních dotazů – může dojít k přetížení systému a k blokaci z naší strany.
Rozkládejte zátěž a seskupujte dotazy do logických sekvencí.
U náročnějších endpointů (např. párování plateb nebo přepočet dokladů) vyčkejte na odpověď před odesláním dalšího požadavku.
Throttling & Retry
Při komunikaci s API může dojít k situaci, kdy server odmítne další požadavky, protože je právě přetížený. Typicky se to projeví chybovým kódem 429 – Too Many Requests.
V takové chvíli není vhodné okamžitě zkoušet požadavek znovu, protože by to zátěž ještě zvýšilo. Správnou praxí je použít tzv. exponenciální backoff – tedy postupně prodlužovat čekací dobu mezi dalšími pokusy.
Pokud dostanete chybu 429 nebo server hlásí přetížení, neprovádějte okamžitý opakovaný pokus.
Použijte exponenciální backoff – po každém neúspěšném pokusu prodlužte čekací dobu (např. 1s → 2s → 4s → 8s).
Tím dáte systému čas na zpracování předchozích požadavků a zvýšíte šanci, že další pokus uspěje.
Rate limiting
Respektujte denní limit počtu dotazů. Výchozí stav je 20.000 / den, nicméně může se u Vaší licence lišit dle zakoupeného objemu.
Počet API požadavků | do 20.000/den | do 50.000/den | do 100.000/den | do 200.000/den |
ABRA Flexi Basic | v ceně pronájmu API | nelze připlatit | nelze připlatit | nelze připlatit |
ABRA Flexi Business | v ceně pronájmu API | 1 000 Kč / měsíc | 2 500 Kč / měsíc | 5 000 Kč / měsíc |
ABRA Flexi Premium | v ceně pronájmu API | 1 000 Kč / měsíc | 2 500 Kč / měsíc | 5 000 Kč / měsíc |
Spolehlivost
Práce s chybovými HTTP kódy
Správné vyhodnocování chybových HTTP kódů je klíčové pro spolehlivou integraci. Každý kód má svůj význam a pomáhá rozlišit, zda je problém na straně klienta (špatný požadavek, neplatná data, chybějící oprávnění), nebo na straně serveru (dočasná nedostupnost, interní chyba). Díky tomu může aplikace reagovat správně – buď opravit data a poslat požadavek znovu, nebo počkat a zkusit akci později.
Rozlišujte chyby 4xx (klientská chyba) – obvykle špatný požadavek, který musíte opravit (např. chybějící parametr, neplatná hodnota, přístup bez oprávnění).
Rozlišujte chyby 5xx (serverová chyba) – dočasný problém na straně API, je vhodné akci zopakovat později (např. výpadek služby).
Nastavte alerty na chyby – pokud API začne vracet větší množství 4xx nebo 5xx odpovědí, je nutné o tom vědět. Na straně klienta se vyplatí takové situace logovat a hlídat.
Tabulka chybových hlášek
Kód | Mapper | Hláška | Vysvětlení |
400 | NamedUsersLimitExceededExceptionMapper | Vaše licence neumožňuje vytvořit uživatele typu '%p'. Pro úpravu licence, prosím, kontaktujte obchodní oddělení ABRA Flexi. | Nemáte volný přístup pro dalšího uživatele, je nutné dokoupit licenci. |
400 | WSUserEmailDuplicatedExceptionMapper | Tento e-mail již používá jiný uživatel. | E-mailová adresa už je v systému zaregistrována. |
400 | OldAppServerExceptionMapper | Verze databáze firmy %p je novější než verze serveru ABRA Flexi. | Databáze byla vytvořena v novější verzi systému než váš server. |
400 | PgRestoreRTExceptionMapper | (obecná zpráva z výjimky) | Obnova databáze se nezdařila, systém vrací technickou chybu. |
400 | QueryExceptionMapper | (obecná zpráva z výjimky) | Dotaz do databáze je chybný nebo neplatný. |
400 | UnsupportedOperationExceptionMapper | (obecná zpráva z výjimky) | Požadovaná operace není v systému podporována. |
400 | WSAccessDeniedExceptionMapper | K této akci nemáte přístup. | Nemáte oprávnění k provedení akce. |
400 | WSApplicationExceptionMapper | (složené zprávy z výjimky a jejich příčin) | Došlo k aplikační chybě, podrobnosti jsou uvedeny v hlášení. |
400 | WebApplicationExceptionMapper | Neplatný formát JSON: %p | Data mají špatný formát a systém je neumí načíst. |
400 | InternalErrorMapper | (pro WSUserErrorException – obecná zpráva) | Došlo k uživatelské chybě v aplikaci. |
400 | LocalizedBusinessException | Obecná lokalizovaná výjimka | Vyskytla se obchodní chyba (např. v nastavení nebo datech). |
400 | MissingParameterException | Parameter '%p' is required for requested operation | V požadavku chybí povinný údaj. |
400 | IncompatibleParameterValuesException | Parameters %p have incompatible values! | Kombinace parametrů je neplatná. |
400 | IllegalParameterFormatException | Parametr '%p' je očekáván ve formátu '%p'. | Hodnota parametru není ve správném formátu. |
400 | ErrorParsingFileException | Soubor se nepodařilo přečíst protože: '%p'. | Systém nedokázal načíst soubor (chybný obsah nebo formát). |
400 | UnsupportedParameterValueException | Parameter '%p' has unsupported value! Choose one from following options: %p | Zadaná hodnota není podporovaná, vyberte některou z povolených. |
402 | PaymentRequiredExceptionMapper | Funkce není povolena v licenci. | Nemáte licenci pro využití této funkce. |
403 | ActionNotSupportedExceptionMapper | Tato akce zde není podporovaná. | Funkce není dostupná v tomto kontextu. |
403 | LicenseExpiredExceptionMapper | (obecná zpráva z výjimky) | Platnost licence vypršela. |
403 | NotAuthorizedExceptionMapper | (obecná zpráva z výjimky) | Nemáte oprávnění k přístupu. |
403 | UnauthorizedExceptionMapper | (obecná zpráva z výjimky) | Pokus o přístup byl zamítnut, chybí oprávnění. |
403 | WarrantyExpiredException | Na datovém zdroji se pokoušíte aktualizovat na novější verzi systému ABRA Flexi, než vás opravňuje zaplacená služba Roční podpora… | Nemáte aktivní roční podporu, která je nutná pro instalaci nové verze. |
403 | CompanyAccessForbiddenException | Do účetnictví firmy máte zablokovaný vstup. | Nemáte povolený přístup k této firmě. |
404 | CompanyNotFoundExceptionMapper | Firma %p neexistuje. | Požadovaná firma nebyla nalezena. |
404 | NotFoundExceptionMapper | Adresa není platná. / Adresa %p není platná. | URL adresa není správná nebo neexistuje. |
404 | UserNotFoundExceptionMapper | Uživatel '%p' neexistuje. | Uživatel nebyl nalezen. |
404 | WSApplicationExceptionMapper | (pro WSObjectNotFoundException) | Požadovaný objekt nebyl nalezen. |
406 | UnsupportedOutputFormatExceptionMapper | (obecná zpráva z výjimky) | Požadovaný výstupní formát není podporován. |
409 | ConcurrentAccessExceptionMapper | (obecná zpráva z výjimky) | Operaci nelze provést, protože s daty pracuje někdo jiný. |
429 | TooManyRequestsException | V této firmě momentálně dochází ke zpracování většího počtu dřívějších požadavků prosím vyčkejte. | Je příliš mnoho požadavků najednou, zkuste to znovu později. |
500 | InternalErrorMapper | (pro obecné výjimky – obecná zpráva) | Nastala neočekávaná chyba serveru. |
500 | ResourceNotFoundException | Requested resource '%p' was not found | Požadovaný zdroj nebyl nalezen. |
503 | ServiceUnavailableException | Služba momentálně není dostupná zkuste to prosím později. | Služba je dočasně nedostupná, zkuste to později. |
503 | ServerStartingException | Server startuje prosím vyčkejte. | Server se spouští, je třeba chvíli počkat. |
503 | CompanyStateException | Company '%s' is in '%s' state. | Firma je v jiném stavu (např. zamčená, v údržbě) a nelze s ní pracovat. |
Idempotence
Při práci se zápisy do API je důležité zajistit, aby se opakovaný požadavek nezpracoval vícekrát a nevytvářel duplicity. Typická situace nastává při výpadku spojení nebo použití strategie retry – klient si není jistý, zda požadavek proběhl, a odešle ho znovu. Bez idempotence by tak mohlo vzniknout více faktur, objednávek nebo jiných dokladů, a to je problém zejména v účetnictví.
U zápisů vždy myslete na to, aby opakovaný request nezaložil duplicitní záznam.
Používejte externí ID – při vytváření nového záznamu mu přidělte identifikátor ze zdrojové databáze nebo systému, odkud data pocházejí.
Pokud se stejný požadavek odešle znovu se stejným externím ID, API vrátí původní výsledek místo vytvoření duplicity.
Příklad
{
"winstrom":{
"@version":"1.0",
"faktura-vydana":[
{
"id":[
"ext:123",
"code:VF1-0035/21"
],
"popis":"popis"
}
]
}
}
Logování requestů a odpovědí
Při integraci s REST API je velmi užitečné uchovávat záznamy o odeslaných požadavcích a přijatých odpovědích. Díky logům můžete rychle zjistit, proč něco nefunguje, co API skutečně vrátilo, nebo jaký požadavek byl na server poslán. Logování je zároveň neocenitelnou pomůckou při komunikaci se zákaznickou podporou – místo vágního popisu „něco se pokazilo“ máte k dispozici konkrétní data.
Uchovávejte logy všech důležitých requestů a odpovědí
Alespoň po omezenou dobu, kdy může být zapotřebí zjišťovat příčinu problému.
Logy vám usnadní ladění chyb a pomohou zjistit, zda problém vznikl na straně klienta nebo serveru.
Při řešení se supportem je možné poskytnout přesný požadavek a odpověď, což značně urychlí hledání příčiny.
Konzistence a verzování
API se v čase vyvíjí – přibývají nová pole, někdy se změní formát nebo logika odpovědi. Pokud na to aplikace není připravena, může při změně přestat fungovat. Proto je důležité psát integrace tak, aby byly odolné vůči změnám, a zároveň mít přehled o vývoji API.
Forward compatibility – navrhujte integraci tak, aby ignorovala neznámá pole a zvládla i drobné změny formátu.
Sledujte change-log – pravidelně kontrolujte změny API a ověřujte, zda se nedotýkají vaší integrace.
Uživatelská zkušenost & integrace
Kvalitní integrace není jen o správném volání API, ale i o tom, jak snadno se nasazuje, testuje a udržuje. Oddělení testovacího a produkčního prostředí snižuje riziko chyb, stejně jako správný přístup k zálohám dat – ty je lepší řešit přes webové rozhraní než přes API.
Testujte na sandboxu – oddělte testovací a produkční prostředí (pomocí zálohy firmy vytvořte kopii ostrých dat), ať neohrozíte reálná data.
Nepoužívejte API pro zálohy v cloudu – automatické zálohy stahujte z webové aplikace, API k tomu není primárně určené.
Monitoring a správa
Bez průběžného přehledu o tom, kolik a jak často API voláte, se problémy odhalují pozdě. Základní monitoring vám pomůže hlídat limity, ladit výkon a předcházet výpadkům integrace.
Sledujte využití API – kontrolujte počty requestů vůči denním limitům přímo ve webové aplikaci, ať můžete však zamezit případnému blokování z naší strany při překročení.
Závěr
Dodržování osvědčených postupů při práci s REST API ABRA Flexi vám pomůže stavět stabilní, bezpečné a dlouhodobě udržitelné integrace. Ať už jde o optimalizaci dotazů, správu chybových stavů nebo bezpečné zacházení s přístupovými údaji, vždy se vyplatí investovat do správného návrhu už od začátku.
Pokud si nejste jistí, jak API využít ve vašem konkrétním scénáři, nebo potřebujete detailnější doporučení, je možné domluvit individuální konzultaci, kde vám s implementací rádi pomůžeme.