Kľúčové slová
API Integrácia - Server REST
Načítanie zoznamu subjektov na strane servera je v niektorých ohľadoch jednoduchšie, než implementácia prostredníctvom javascript v prehliadači. Odpadá napr. nutnosť formátovať odpoveď a nie sú potrebné žiadne externé knižnice.
Pre získanie odpovede na strane servera je potrebné zaslať autorizovanú POST požiadavku s rovnakými vstupnými parametrami ako v prípade implementácie prostredníctvom javascriptu. Vrátená odpoveď zo servera má taktiež rovnakú štruktúru.
Správne nastavenie parametrov v hlavičke (request headers)
Odoslanie požiadavky zo servera vyžaduje správne nastavenie parametrov v hlavičke požiadavky (request headers). POST požiadavka môže byť odoslaná dvoma spôsobmi - buď ako HTML formulár, alebo ako JSON dáta.- HTML formulár
V tomto prípade sú odosielané údaje zakódované rovnakým spôsobom ako pri odoslaní multipart HTML formulára. Do hlavičky je potrebné uviesť správny typ formátu nasledovne:Content-type: application/x-www-form-urlencoded
Zároveň dáta je potrebné odoslať ako URL-encoded (napr. v PHP použite funkciu http_build_query). - JSON dáta
V tomto prípade je potrebné dáta odoslať ako zakódovaný JSON reťazec v tvare napr.{key1:"value1", key2:"value2",..}
- pre PHP použite funkciu json_encode - a do hlavičky treba nastaviť dva parametre:Content-type: application/json
Accept: application/json
Príklad implementácie v PHP (bez externých závislostí)
// voláme funkciu pre načítanie zoznamu
$response = findCompanies('slovnaft');
/**
* Return list of companies matching supplied $searchName
* @param string $searchName Sought company name, e.g. "jan holub" or "slovnaft"
* @return array $out List of matching companies. Contains key "errorMsg" if error occured.
*/
function findCompanies ( $searchName )
{
// parametre API požiadavky
$params = [
'xauth' => 'my-secret-key', // povinný autentifikačný kľúč
'term' => $searchName, // hľadaný výraz
'option_size' => 2, // nepovinné - zmeníme počet vrátených záznamov
'option_extra_field' => 'text_kraj, text_velkost', // nepovinné - dodatočné atribúty
];
$options = [
// nastavíme kratší čas pre čakanie na odpoveď a typ obsahu
'http' => [
'method' => 'POST', // must be uppercase, GET is not supported
'timeout' => 5, // connect timeout
// odoslať ako POST request
'content' => http_build_query($params),
'header' => [
'Content-type: application/x-www-form-urlencoded; charset=utf-8',
],
// alebo odkomentujte pre odoslanie ako JSON data
/*
'content' => json_encode($params, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE),
'header' => [
'Content-type: application/json; charset=utf-8',
'Accept: application/json',
],
*/
// uncomment to show returned API error rather than PHP errors
//'ignore_errors' => true,
],
// pri vývoji na lokálnom serveri môže byť vhodné vypnúť kontrolu certifikátu
'ssl' => [
// 'verify_peer' => false,
// 'verify_peer_name' => false,
],
];
// získame odpoveď
$errorMsg = '';
$out = [];
$url = "https://bizdata.sk/api/v1/search-company";
try {
$ctx = stream_context_create($options);
$response = file_get_contents($url, false, $ctx);
} catch(\Exception $e) {
$errorMsg = $e->getMessage();
}
// spracujeme odpoveď - dekódujeme JSON reťazec
if (!$errorMsg) {
if ($response && ($response = json_decode($response, true))) {
// preveríme, či server vrátil chybu, alebo platný zoznam subjektov
if (!empty($response['errorMsg'])) {
$errorMsg = $response['errorMsg'];
} elseif ( !empty($response[0]['label']) ) {
foreach ( $response as $id => $data ) {
$out[$id] = json_decode($data['value'], true);
}
} else {
$errorMsg = "Neznáma chyba.";
}
} elseif (false === $response) {
$errorMsg = "Chyba spojenia.";
} else {
$errorMsg = "Neboli nájdené žiadne záznamy.";
}
}
if($errorMsg){
$out['errorMsg'] = $errorMsg;
}
return $out;
}
Príklad odpovede:
array (
0 => array (
'obchodne_meno' => 'SLOVNAFT, a.s.',
'hash' => 'csgYb-aW064XfGytv1DlJw',
'is_active' => 1,
'is_likvidacia_konkurz' => 0,
'ico' => '31322832',
'dic' => '2020372640',
'kod_typ_osoby' => 'P',
'addr_street_nr' => 'Vlčie hrdlo 1',
'addr_street' => 'Vlčie hrdlo',
'addr_number' => '1',
'addr_city' => 'Bratislava',
'addr_zip' => '82412',
'hlavicka' => 'Spoločnosť zapísaná v obchodnom registri Mestského súdu Bratislava III, oddiel sa, vložka 426/B.',
'hlavicka_kratka' => 'MS Bratislava III, oddiel sa, vložka 426/B.',
'orsr_sud' => 'Bratislava III',
'orsr_oddiel' => 'sa',
'orsr_vlozka' => '426/B',
'zrsr_urad' => 'Bratislava',
'zrsr_cislo_registra' => '102-12319',
'kod_nace' => '19200',
'text_nace' => 'Výroba rafin.ropn.prod.',
'kod_pravna_forma' => '121',
'text_pravna_forma' => 'Akc. spol.',
'date_vznik' => '01.05.1992',
'date_zanik' => '',
'text_kraj' => 'Bratislavský kraj',
'text_velkost' => '2000-2999 zamestnancov',
),
1 => array (
'obchodne_meno' => 'Slovnaft Retail, s.r.o.',
'hash' => 'FxBQEwMI2OIbYf9xAFnjSQ',
'is_active' => 1,
'is_likvidacia_konkurz' => 0,
'ico' => '35681039',
'dic' => '2020323261',
'kod_typ_osoby' => 'P',
'addr_street_nr' => 'Vlčie hrdlo 1',
'addr_street' => 'Vlčie hrdlo',
'addr_number' => '1',
'addr_city' => 'Bratislava',
'addr_zip' => '82107',
'hlavicka' => 'Spoločnosť zapísaná v obchodnom registri Mestského súdu Bratislava I, oddiel sro, vložka 10146/B.',
'hlavicka_kratka' => 'MS Bratislava I, oddiel sro, vložka 10146/B.',
'orsr_sud' => 'Bratislava I',
'orsr_oddiel' => 'sro',
'orsr_vlozka' => '10146/B',
'zrsr_urad' => 'Bratislava',
'zrsr_cislo_registra' => '104-20633',
'kod_nace' => '47300',
'text_nace' => 'Maloobch.s pohon.látkami',
'kod_pravna_forma' => '112',
'text_pravna_forma' => 'Spol. s r. o.',
'date_vznik' => '19.12.1995',
'date_zanik' => '',
'text_kraj' => 'Bratislavský kraj',
'text_velkost' => '1 zamestnanec',
),
...
)