Přeskočit na hlavní obsah

Chybove kody

Prehled vsech chybovych odpovedi API.

HTTP stavove kody

KodNazevPopis
200OKUspesny pozadavek
201CreatedZdroj uspesne vytvoren
400Bad RequestChybny pozadavek (chybi parametry)
401UnauthorizedChybi nebo neplatna autentizace
403ForbiddenNedostatecna opravneni
404Not FoundZdroj nenalezen
409ConflictKonflikt (napr. kolize terminu)
429Too Many RequestsPrekrocen limit pozadavku
500Internal Server ErrorInterni chyba serveru

Chybove kody aplikace

Autentizace

KodPopisReseni
API_KEY_MISSINGChybi hlavicka X-API-KeyPridejte hlavicku s API klicem
API_KEY_INVALIDNeplatny API klicZkontrolujte spravnost klice
API_KEY_INACTIVEAPI klic je deaktivovanyAktivujte klic v nastaveni
PROJECT_INACTIVEProjekt neni aktivniKontaktujte podporu
PROJECT_MISMATCHAPI klic nepatri k projektuPouzijte spravny klic pro projekt

Opravneni

KodPopisReseni
PERMISSION_DENIEDNedostatecna opravneniPridejte potrebna opravneni ke klici

Rezervace

KodPopisReseni
CUSTOMER_BLACKLISTEDZakaznik je na blacklistuKontaktujte provozovatele
DOUBLE_BOOKINGKolize s existujici rezervaciVyberte jiny termin nebo stul
INVALID_STATUS_TRANSITIONNeplatny prechod statusuZkontrolujte aktualni status
SLOT_NOT_AVAILABLETermin neni dostupnyVyberte jiny termin

Format chybove odpovedi

{
"error": "Error Type",
"message": "Lidsky citelny popis chyby",
"code": "ERROR_CODE"
}

Priklady

Chybejici autentizace

{
"error": "Unauthorized",
"message": "Missing X-API-Key header",
"code": "API_KEY_MISSING"
}

Nedostatecna opravneni

{
"error": "Forbidden",
"message": "API key does not have write permission",
"code": "PERMISSION_DENIED"
}

Neplatny pozadavek

{
"error": "Bad Request",
"message": "Required fields: email, date, from, to"
}

Konflikt

{
"error": "Conflict",
"message": "Table is already reserved for this time slot",
"code": "DOUBLE_BOOKING"
}

Zpracovani chyb

JavaScript

async function apiCall(url, options = {}) {
const response = await fetch(url, {
...options,
headers: {
'X-API-Key': API_KEY,
'Content-Type': 'application/json',
...options.headers
}
});

const data = await response.json();

if (!response.ok) {
const error = new Error(data.message || 'API error');
error.code = data.code;
error.status = response.status;
throw error;
}

return data;
}

// Pouziti
try {
const result = await apiCall('/api/v1/projekt/reservations', {
method: 'POST',
body: JSON.stringify({ ... })
});
} catch (error) {
switch (error.code) {
case 'DOUBLE_BOOKING':
alert('Tento termin je jiz obsazen. Vyberte prosim jiny.');
break;
case 'CUSTOMER_BLACKLISTED':
alert('Nelze vytvorit rezervaci. Kontaktujte provozovatele.');
break;
case 'PERMISSION_DENIED':
console.error('API klic nema potrebna opravneni');
break;
default:
console.error('Neocekavana chyba:', error.message);
}
}

PHP

function apiCall($url, $method = 'GET', $body = null) {
$ch = curl_init();

curl_setopt_array($ch, [
CURLOPT_URL => $url,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'X-API-Key: ' . API_KEY,
'Content-Type: application/json'
],
CURLOPT_CUSTOMREQUEST => $method
]);

if ($body) {
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($body));
}

$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

$data = json_decode($response, true);

if ($httpCode >= 400) {
throw new Exception(
$data['message'] ?? 'API error',
$httpCode
);
}

return $data;
}

// Pouziti
try {
$result = apiCall('https://api.zarezervujto.cz/api/v1/projekt/info');
} catch (Exception $e) {
error_log('API chyba: ' . $e->getMessage());
}

Rate limiting

Pri prekroceni limitu pozadavku obdrzite:

{
"error": "Too Many Requests",
"message": "Rate limit exceeded. Try again in 60 seconds.",
"retryAfter": 60
}

Hlavicky

HlavickaPopis
X-RateLimit-LimitMax pocet pozadavku
X-RateLimit-RemainingZbyvajici pocet pozadavku
X-RateLimit-ResetUnix timestamp resetovani
Retry-AfterPocet sekund do dalsiho pokusu

Doporuceni

  • Implementujte exponential backoff pri chybach 429
  • Cachovejte odpovedi kde je to mozne
  • Pouzivejte webhooky misto pollingu