Balíkonoš API je založeno na RESTové architektuře. K jeho korektnímu používání musíte:
Pro snadné napojení na naše API je Vám k dispozici testovacím prostředí, které je zcela totožné z produkčním, nicméně Vámi vložená data jsou oddělena a nejsou zasílána ke zpracování skutečným přepravcům.
Všechny požadavky kromě kořenového zdroje vyžadují HTTP Bearer autentizaci.
K přístupu tedy potřebujete získat takzvaný access_token
pomocí protokolu OAuth 2.0, více v jeho dokumentaci.
Vzhledem k povaze této autentizace je NUTNÉ přistupovat vždy přes protokol HTTPS.
Byť jediný přístup k API přes HTTP s korektní hlavičkou Authorization
může teoreticky vést k odposlechnutí vašich přístupových údajů.
Prvotním ověřením na Vaší straně by vždy měla být kontrola vrácného HTTP kódu. Všechny tyto kódy odpovídají specifikaci HTTP. Níže naleznete krátký popis možných kódů v odpovědi:
Authorization
nebo obsahuje neplatné údaje
Accept
Content-type
Abychom Vám co nejvíce ulehčili napojení na naše API, podporujeme několik formátů dat v komunikaci. Použití je snadné:
Accept
Content-Type
application/json
v dané hlavičce (doporučený formát)application/xml
v dané hlavičce (deprecated)application/x-www-form-urlencoded
v dané hlavičce (deprecated)
Pokud hlavička Accept není uvedená, nebo používá generické */*
, je jako výchozí formát použit JSON.
V případě neplatné či nepodporované hlavičky Accept je chybová zpráva vrácena také ve formátu JSON.
Pokud se rozhodnete využívat formát XML pro odpovědi z našeho serveru, kořenový tag je vždy <root>
Pokud přijmeme nevalidní vstupní formát, je vrácen HTTP kód 400 s popisem chyby.
Pokud není uvedeno jinak, všechny datumové formáty jsou ve formátu ISO 8601,
např. 2014-12-31T18:25:50+02:00
Lze používat desetinnou čárku i desetinnou tečku. Oddělovač tisíců nesmí být použit.
Pokud dojde k chybě na naší straně na nižší než aplikační úrovni, může být odpověd v jiném formátu, než bylo požadováno v hlavičce Accept
.
Tyto chyby mohou nastat při serverových chybách či údržbě aplikace, proto doporučujeme před parsováním odpovědi zkontrolovat vrácený HTTP kód.
Příkladem může být i chyba 414
.
Pokud je vrácen kód 5xx
, je možné, že odpověď není v očekávaném formátu.
Všechny odpovědi dodržují stejnou strukturu odpovědi. Konkrétní odpověď záleží na požadovaném formátu dat, nicméně struktura je vždy následující:
root --- code --- status --- message --- data
root --- code --- status --- message --- errors --- --- --- --- --- message --- --- --- field --- --- --- value --- --- --- --- --- message --- --- --- field --- --- --- value
<?xml version="1.0" encoding="UTF-8"?> <root> <code>422</code> <status>error</status> <message>Validation failed</message> <errors> <message>This value should be of type float.</message> <field>[0].packages[0].weight</field> <value>3 kg</value> </errors> <errors> <message>Invalid currency format, expected ISO 4217</message> <field>[0].valueCurrency</field> <value>€</value> </errors> </root>
code
je obecné označení chyby totožné s HTTP kódemstatus
značí stav požadavku, možné hodnoty jsou: success, errormessage
obecný popis chyby (anglicky)data
data odpovědi, pouze pro úspěšné odpovědi, ne vždy přítomné, struktura se liší pro různé požadavkyerrors
pole chyb, pouze pro chybové odpovědi, ne vždy přítomnéerrors.message
je anglický popis konkrétní chyby (o české chyby lze zažádat hlavičkou accept-language: cs
)errors.field
je cesta k položce, kde k chybě došlo (viz příklady výše)errors.value
je chybná hodnota (nemusí se přesně shodovat s odeslanou hodnotou)
Všechny klíče jsou vždy ve formátu camelCase
.
Bližší popis možných chybových odpovědí, kódů a strukturu úspěšné odpovědi najdete přímo u
konkrétních metod a zdrojů.
Je velmi pravděpodobné, že při vývoji budete chtít ověřit co API vrací na různé požadavky.
Velmi rychle můžete začít testovat naše API, pokud zaregistrujete testovací společnost na adrese https://test.balikonos.cz. Jde o separátní prostředí s oddělenou databází, kde nedochází k reálnému objednávání přepravy. Pro testování konkrétního přepravce je zapotřebí v klientské zóně zadat libovolné testovací autentizační údaje. Pro testování zásilek bez automatického zahrnutí přímé zásilky (například u GLS) je zapotřebí vytvořit typ svozu u požadovaného svozového místa. Veškeré vložené údaje přes API se samozřejmě projeví i v uživatelském prostředí tohoto prostředí, takže můžete kontrolovat Vámi vložená data přímo v prohlížeči.
Asi nejjednoušší možnost jak testovat naše API je pomocí nástroje cURL z příkazové řádky. Ukázka možného použití:
curl -H "Accept: application/xml" -H "Authorization: Bearer bacffecfc1bd349b85e51b37a542aed57f457a8e" http://balikonos.cz/api/
Existuje celá řada dalších nástrojů k testování RESTových API, například rozšíření Chrome prohlížeče POSTman.
Použití jednotlivých verzí API je určeno v adrese zdroje.
Aktuálně je API ve třetí verzi, tedy URL všech zdrojů začínají na http://balikonos.cz/api/v3
.
O implementaci nových verzí Vás budeme informovat, přečemž původni verze bude po nějakou dobu stále funkčí.
Minoritní změny v API, které neovlivňují dosavadní funkčnost se v adrese neprojeví.
Pokud v požadavku uvedete hlavičku Accept-encoding: gzip
, výsledné tělo odpovědi Vám přijde v komprimované podobě gzip.
Tato metoda ušetří u souborů XML
kolem 80 % přenesených dat! Pro JSON jde cca o 65 % dat.
Komprimovaná data se vrátí spolu s hlavičkou Content-encoding: gzip
.
Na vás je pouze dekódování přijatého obsahu, což je ve většině jazyků velmi snadné.
Viz například PHP.
Stejně tak můžete i vy zasílat tělo zprávy komprimované pomocí gzip metody.
Je však nutné uvést hlavičku Content-encoding: gzip
.
Taktéž je možné nakonfigurovat Váš server tak, aby tuto komprimaci a dekomprimaci prováděl zcela automaticky, viz například apache.
Jelikož množství přenášených dat může být skutečně velké, výrazně doporučujeme používat komprimaci vždy a všude.
Všechny GET
metody vracejí odpovědi s hlavičkou ETag
, která obsahuje hash aktuálně vrácené odpovědi.
Tuto hodnotu je vhodné ukládat spolu s vrácenými daty a v případě potřeby stejného dotazu v budoucnu doplnit hash do hlavičky If-None-Match
.
Pokud se totiž odpověď od Vašeho posledního dotazu nezměnil, HTTP odpověď bude mít kód 304 a tělo bude prázdé –
ušetříte tedy datový přenos obsahu, který již máte uložený z předchozího požadavku.
Toto je obzvláště vhodné při dotazech vracejících větší množství dat (například PDF štítky).
Chování si můžete prohlédnout i v prohlížeči na kořenovém zdroji:
Pokud vaše aplikace z nějakého důvodu neumožňuje zasílat PUT či DELETE HTTP požadavky, je možné přetížit metodu POST.
Pokud nastavíte hlavičku X-HTTP-Method-Override
na některou ze zmíněných hodnot (PUT či DELETE) při POST požadavku, bude vykonána stejná akce, jako kdyby se provedl PUT či DELETE požadavek.
Takto přetížit lze pouze metoda POST, nikoli GET. Metoda GET je totiž safe a nesmí měnit stav zdroje.
Standardní JSON a XML odpovědi obsahují odřádkování i odsazení vnitřních elementů pro lepší čitelnost.
Toto chování lze vypnout nastavením query parametru prettyPrint
na false
.
Viz například kořenový zdroj.
Tímto lze také mírně snížit objem přenášených dat.
Podpora pro JSONP není z technického hlediska možná z důvodu HTTP Bearer autentizace.
Podpora Cross-origin resource sharing zatím není implementována. Pokud byste měli zájem o tuto funkcionalitu, dejte nám vědět.