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.
  1. 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).
  2. 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
Pre obidve varianty pozrite vzorový príklad implementácie v PHP nižšie. Na účel testovania môžete využiť tiež voľne dostupné online služby napr. reqbin.com, restninja.io alebo aplikáciu postman.
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',
  ),
  ...
)