Referenční příručka API

CatCMS poskytuje komplexní REST API pro programovou správu obsahu, kolekcí, médií a autentizace. Je postaveno na Cloudflare Workers s tříúrovňovým systémem mezipaměti pro optimální výkon.[object Object]


Úvod[object Object]

Základní URL

https://your-domain.com/api

Pro lokální vývoj:

http://localhost:8787/api

Interaktivní dokumentace API

CatCMS obsahuje interaktivní průzkumník API poháněný Scalar UI. Přistupovat k němu můžete na adrese:

http://localhost:8787/docs

Specifikace OpenAPI

Získejte kompletní specifikaci OpenAPI 3.0:

curl -X GET "http://localhost:8787/api/"

Autentizace[object Object]

Většina API endpointů vyžaduje autentizaci. CatCMS používá JWT (JSON Web Tokens) s HTTP-only cookies pro webové klienty a Bearer tokeny pro API klienty.

Přihlášení

Získejte přístupový token ověřením pomocí svých přihlašovacích údajů.

Login Request

Login Response

{
  "user": {
    "id": "admin-user-id",
    "email": "admin@catcms.app",
    "username": "admin",
    "firstName": "Admin",
    "lastName": "User",
    "role": "admin"
  },
  "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}
{
  "error": "Invalid email or password"
}

Použití tokenu

Zahrňte token do hlavičky Authorization u všech autentizovaných požadavků:

Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...

Pro aplikace běžící v prohlížeči je token automaticky uložen jako HTTP-only cookie s názvem auth_token.

Registrace

Vytvořte nový uživatelský účet.

Register Request

Získat aktuálního uživatele

Získejte informace o aktuálně přihlášeném uživateli.

Get User Request

Obnovit token

Obnovte svůj přístupový token, než vyprší jeho platnost.

curl -X POST "http://localhost:8787/auth/refresh" \
  -H "Authorization: Bearer {token}"

Odhlášení

Ukončete svou relaci.

curl -X POST "http://localhost:8787/auth/logout"

Kolekce[object Object]

Vypsat všechny kolekce

Získejte všechny aktivní kolekce s jejich schématy.

Autentizace: Nevyžaduje se Mezipaměť: 5 minut

List Collections

Collections Response

{
  "data": [
    {
      "id": "blog-posts-collection-id",
      "name": "blog-posts",
      "display_name": "Blog Posts",
      "description": "Blog posts collection",
      "schema": {
        "name": "blog-posts",
        "displayName": "Blog Posts",
        "fields": [
          {
            "name": "title",
            "type": "text",
            "label": "Title",
            "required": true
          },
          {
            "name": "content",
            "type": "richtext",
            "label": "Content"
          },
          {
            "name": "featuredImage",
            "type": "media",
            "label": "Featured Image"
          }
        ]
      },
      "is_active": 1,
      "created_at": 1730000000,
      "updated_at": 1730000000
    }
  ],
  "meta": {
    "count": 1,
    "timestamp": "2025-10-06T12:34:56.789Z",
    "cache": {
      "hit": false,
      "source": "database"
    },
    "timing": {
      "total": 45,
      "execution": 12,
      "unit": "ms"
    }
  }
}

Správa obsahu[object Object]

Vypsat veškerý obsah

Získejte všechny položky obsahu se stránkováním a filtrováním.

Autentizace: Nevyžaduje se Mezipaměť: 5 minut

Parametry dotazu:

  • limit - Maximální počet položek k vrácení (výchozí: 50, max: 100)
  • offset - Počet položek k přeskočení pro stránkování
  • sort - Pole pro řazení (jako prefix použijte - pro sestupné řazení)
  • filter - Pokročilé filtrování (viz Filtrování a dotazování)

List Content

Získat obsah podle kolekce

Získejte obsah pro konkrétní kolekci.

Autentizace: Nevyžaduje se Mezipaměť: 5 minut

Get Collection Content

Získat jednu položku obsahu

Získejte konkrétní položku obsahu podle ID.

Autentizace: Nevyžaduje se Mezipaměť: 5 minut

Get Content

Vytvořit obsah

Vytvořte novou položku obsahu.

Autentizace: Vyžaduje se Oprávnění: Role Editor nebo Admin

Create Content

Aktualizovat obsah

Aktualizujte existující položku obsahu.

Autentizace: Vyžaduje se Oprávnění: Vlastník obsahu, role Editor nebo Admin

Update Content

Smazat obsah

Smažte položku obsahu.

Autentizace: Vyžaduje se Oprávnění: Vlastník obsahu, role Editor nebo Admin

Delete Content


Správa médií[object Object]

Všechny endpointy pro média vyžadují autentizaci.

Nahrát jeden soubor

Nahrát soubor do úložiště Cloudflare R2.

Autentizace: Vyžaduje se Content-Type: multipart/form-data Maximální velikost souboru: 50 MB

Podporované typy souborů:

  • Obrázky: JPEG, PNG, GIF, WebP, SVG
  • Dokumenty: PDF, TXT, DOC, DOCX
  • Videa: MP4, WebM, OGG, AVI, MOV
  • Audio: MP3, WAV, OGG, M4A

Upload File

Upload Response

{
  "success": true,
  "file": {
    "id": "V1StGXR8_Z5jdHi6B",
    "filename": "V1StGXR8_Z5jdHi6B.jpg",
    "originalName": "my-image.jpg",
    "mimeType": "image/jpeg",
    "size": 245678,
    "width": 1920,
    "height": 1080,
    "publicUrl": "https://pub-catcms-media-dev.r2.dev/blog-images/V1StGXR8_Z5jdHi6B.jpg",
    "thumbnailUrl": "https://imagedelivery.net/account-id/blog-images/V1StGXR8_Z5jdHi6B.jpg/thumbnail",
    "uploadedAt": "2025-10-06T12:34:56.789Z"
  }
}
{
  "error": "File validation failed",
  "details": [
    {
      "code": "too_big",
      "message": "File size exceeds 50MB limit",
      "path": ["size"]
    }
  ]
}

Nahrát více souborů

Nahrát více souborů v jednom požadavku.

Autentizace: Vyžaduje se

Upload Multiple Files

Aktualizovat metadata souboru

Aktualizovat metadata souboru (alt text, popisek, štítky, složka).

Autentizace: Vyžaduje se Oprávnění: Role Uploader nebo Admin

Update File

Smazat soubor

Smazat jeden soubor.

Autentizace: Vyžaduje se Oprávnění: Role Uploader nebo Admin

Delete File

Hromadné mazání souborů

Smazat více souborů v jednom požadavku.

Autentizace: Vyžaduje se Max souborů: 50 na požadavek

Bulk Delete

Hromadný přesun souborů

Přesunout více souborů do jiné složky.

Autentizace: Vyžaduje se Max souborů: 50 na požadavek

Bulk Move


Systémové endpointy[object Object]

Kontrola stavu

Zkontrolujte stav API a systému.

Autentizace: Nevyžaduje se

Health Check

Systémové informace

Získejte systémové informace a dostupné funkce.

Autentizace: Nevyžaduje se

curl -X GET "http://localhost:8787/api/system/info"

Systémové statistiky

Získejte statistiky databáze (počet obsahu, počet médií, počet uživatelů).

Autentizace: Vyžaduje se role Admin

curl -X GET "http://localhost:8787/api/system/stats" \
  -H "Authorization: Bearer {token}"

Ping databáze

Zkontrolujte připojení k databázi a latenci.

Autentizace: Nevyžaduje se

curl -X GET "http://localhost:8787/api/system/ping"

Filtrování a dotazování[object Object]

CatCMS poskytuje výkonné možnosti filtrování pro dotazy na obsah.

Filtrovací operátory

OperátorPopisPříklad
equalsPřesná shodafilter[status][equals]=published
not_equalsNení rovnofilter[status][not_equals]=draft
greater_thanVětší nežfilter[price][greater_than]=100
less_thanMenší nežfilter[price][less_than]=1000
likeVyhledávání bez ohledu na velikost písmenfilter[title][like]=javascript
containsŘetězec obsahujefilter[tags][contains]=tutorial
inHodnota v seznamufilter[category][in]=blog,news
not_inHodnota není v seznamufilter[status][not_in]=draft,archived
existsPole existujefilter[featuredImage][exists]=true

Příklady filtrů

Jednoduchý filtr rovnosti:

curl "http://localhost:8787/api/content?filter[status][equals]=published"

Vícenásobné filtry (logika AND):

curl "http://localhost:8787/api/content?\
filter[status][equals]=published&\
filter[category][equals]=blog&\
filter[price][less_than]=100"

Vyhledávání pomocí LIKE:

curl "http://localhost:8787/api/content?filter[title][like]=getting started"

Filtr s operátorem IN:

curl "http://localhost:8787/api/content?filter[category][in]=blog,tutorial,guide"

Filtr rozmezí dat:

curl "http://localhost:8787/api/content?\
filter[created_at][greater_than]=2025-01-01&\
filter[created_at][less_than]=2025-12-31"

Řazení

Seřaďte výsledky podle libovolného pole. Jako prefix použijte - pro sestupné řazení.

# Sort by created_at descending
curl "http://localhost:8787/api/content?sort=-created_at"

# Sort by title ascending
curl "http://localhost:8787/api/content?sort=title"

Stránkování

Použijte limit a offset pro stránkování.

# Get first 10 items
curl "http://localhost:8787/api/content?limit=10&offset=0"

# Get next 10 items
curl "http://localhost:8787/api/content?limit=10&offset=10"

Ukládání do mezipaměti[object Object]

CatCMS implementuje tříúrovňový systém mezipaměti pro optimální výkon.

Úrovně mezipaměti

  1. Paměťová mezipaměť - Mezipaměť v paměti (nejrychlejší, ~1-3 ms)
  2. KV mezipaměť - Úložiště Cloudflare KV (rychlé, ~5-15 ms)
  3. Databáze - Databáze D1 (pomalejší, ~20-50 ms)

Hlavičky mezipaměti

Každá odpověď API obsahuje informace o mezipaměti:

X-Cache-Status: HIT
X-Cache-Source: memory
X-Cache-TTL: 278
X-Response-Time: 3ms

Hlavičky:

  • X-Cache-Status - HIT nebo MISS
  • X-Cache-Source - memory, kv, nebo database
  • X-Cache-TTL - Zbývající TTL v sekundách (pouze pro zásahy do mezipaměti)
  • X-Response-Time - Celková doba odezvy

TTL mezipaměti

ZdrojTTLPaměťKV
Odpovědi API5 min
Kolekce2 h
Obsah1 h
Uživatelská data15 min
Metadata médií1 h

Zneplatnění mezipaměti

Mezipaměti jsou automaticky zneplatněny, když:

  • Je vytvořen, aktualizován nebo smazán obsah
  • Jsou upraveny kolekce
  • Jsou nahrány nebo smazány mediální soubory
  • Změní se uživatelská oprávnění

Zpracování chyb[object Object]

CatCMS používá standardní stavové kódy HTTP a vrací konzistentní chybové odpovědi.

Stavové kódy HTTP

KódPopis
200Úspěch
201Vytvořeno
400Chybný požadavek
401Neautorizováno
403Zakázáno
404Nenalezeno
500Vnitřní chyba serveru

Formát chybové odpovědi

{
  "error": "Error message",
  "details": [
    {
      "code": "validation_error",
      "message": "Field is required",
      "path": ["fieldName"]
    }
  ]
}

Běžné chyby

401 Neautorizováno:

{
  "error": "Authentication required"
}

403 Zakázáno:

{
  "error": "Insufficient permissions"
}

404 Nenalezeno:

{
  "error": "Resource not found"
}

400 Chyba validace:

{
  "error": "Validation failed",
  "details": [
    {
      "code": "invalid_type",
      "message": "Expected string, received number",
      "path": ["title"]
    }
  ]
}

Omezení počtu požadavků

V současné době CatCMS nevynucuje omezení počtu požadavků. To se může v budoucích verzích změnit.

Pro produkční nasazení zvažte implementaci omezení počtu požadavků na úrovni Cloudflare Workers pomocí:


Další kroky

Pro dotazy nebo podporu navštivte naši Komunita stránku.

Was this page helpful?