Caching
TCA_API supports tag-based HTTP response caching for list and show
operations. When enabled, responses are stored in a TYPO3 cache and served
from there on subsequent identical requests — bypassing the database query and
serialization entirely.
Configuration
Add a cache section to any resource definition:
return [
'general' => [
'table' => 'tx_myext_domain_model_article',
'resourceName' => 'articles',
'resourceType' => 'Article',
'operations' => ['list', 'show'],
],
'cache' => [
'enabled' => true,
'lifetime' => 3600, // seconds; default: 86400
'parametersToIgnore' => ['preview'], // bypass cache when ?preview=… present
],
];
| Key | Required | Default | Description |
|---|---|---|---|
enabled | No | false | Enable caching for this resource. |
lifetime | No | 86400 | Cache TTL in seconds. |
parametersToIgnore | No | [] | Query parameters that bypass the cache entirely when present in the
request (top-level or nested under filters[…]). Useful for preview
or debug parameters. |
Cache flow
For every GET request to a cached resource the dispatcher:
- Builds a cache key from the operation, resource name, UID, and sorted query parameters.
- Checks the
tca_apiTYPO3 cache. - HIT — returns the stored response body with
X-TCA-API-Cache: HITheader. - MISS — runs the handler, serializes records (tagging each one as
{table}_{uid}), stores the response, and returns it withX-TCA-API-Cache: MISSandX-Cache-Tagsheaders.
Response headers
| Header | Value |
|---|---|
X-TCA-API-Cache | HIT or MISS |
X-Cache-Tags | Space-separated list of tags for the records in this response,
e.g. tx_myext_domain_model_article_1 tx_myext_domain_model_article_2 |
Cache invalidation
Cache entries are invalidated automatically via a TYPO3 DataHandler hook
(clearCachePostProc) whenever a record is created, updated, or deleted
through the TYPO3 backend. All cached responses tagged with the affected table
name are flushed.
Note
API write operations (POST, PUT, PATCH, DELETE) do not
trigger cache invalidation. Cached responses for a table remain valid until
the next backend (DataHandler) operation touches the same table.
Cache backend
The extension registers the tca_api cache with an empty configuration,
which defaults to TYPO3's Typo3DatabaseBackend (tables cf_tca_api /
cf_tca_api_tags). For production use, configure a faster backend in
config/ (or Local):
$GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations']['tca_api'] = [
'backend' => \TYPO3\CMS\Core\Cache\Backend\FileBackend::class,
'frontend' => \TYPO3\CMS\Core\Cache\Frontend\VariableFrontend::class,
'options' => ['defaultLifetime' => 86400],
];
A Redis or Memcached backend can further reduce response times for high-traffic deployments.