Chyby
Sentisnap API používá konvenční HTTP stavové kódy a vrací chyby v konzistentním JSON formátu.
| Kód | Popis |
|---|---|
200 | Úspěch |
201 | Vytvořeno (zdroj úspěšně vytvořen) |
204 | Bez obsahu (úspěšné smazání) |
400 | Chybný požadavek (neplatné parametry) |
401 | Neautorizováno (neplatný nebo chybějící API klíč) |
403 | Zakázáno (nedostatečná oprávnění) |
404 | Nenalezeno |
429 | Příliš mnoho požadavků (překročen rate limit) |
500 | Interní chyba serveru |
Formát chybové odpovědi
Všechny chyby mají tuto strukturu:
{
"error": {
"code": "error_code",
"message": "Human-readable error message",
"details": {}
}
}Kódy chyb
Chyby autentizace
| Kód | HTTP | Popis |
|---|---|---|
unauthorized | 401 | Chybí Authorization hlavička |
invalid_api_key | 401 | Neplatný formát API klíče nebo klíč nenalezen |
expired_api_key | 401 | API klíč vypršel |
revoked_api_key | 401 | API klíč byl revokován |
Chyby autorizace
| Kód | HTTP | Popis |
|---|---|---|
forbidden | 403 | Obecné odepření přístupu |
insufficient_scope | 403 | API klíč nemá potřebné oprávnění |
Chyby požadavku
| Kód | HTTP | Popis |
|---|---|---|
validation_error | 400 | Neplatné parametry požadavku |
not_found | 404 | Zdroj nenalezen |
rate_limit_exceeded | 429 | Překročen rate limit |
Chyby serveru
| Kód | HTTP | Popis |
|---|---|---|
internal_error | 500 | Interní chyba serveru |
Detaily validačních chyb
Pro validační chyby pole details obsahuje konkrétní chyby polí:
{
"error": {
"code": "validation_error",
"message": "Validation failed",
"details": [
{
"path": [
"url"
],
"message": "Invalid url"
},
{
"path": [
"events"
],
"message": "Required"
}
]
}
}Příklad zpracování chyb
async function makeApiRequest(endpoint) {
const response = await fetch(
`https://public-api.sentisnap.com/v1${endpoint}`,
{
headers: {
'Authorization': `Bearer ${API_KEY}`
}
}
);
if (!response.ok) {
const error = await response.json();
switch (error.error.code) {
case 'invalid_api_key':
throw new Error('Please check your API key');
case 'rate_limit_exceeded':
const retryAfter = response.headers.get('Retry-After');
throw new Error(`Rate limited. Retry after ${retryAfter} seconds`);
case 'not_found':
return null;
default:
throw new Error(error.error.message);
}
}
return response.json();
}