maikschneider / tca-api
This package provides an REST API based on the TYPO3 TCA — exposes database tables as Hydra JSON-LD resources.
Package info
github.com/maikschneider/tca-api
Type:typo3-cms-extension
pkg:composer/maikschneider/tca-api
Requires
- php: ^8.2
- riverline/multipart-parser: ^2.2
- typo3/cms-core: ^13.4 || ^14.3
Requires (Dev)
- armin/editorconfig-cli: ^2.1
- bk2k/bootstrap-package: ^16.0
- ergebnis/composer-normalize: ^2.45
- friendsofphp/php-cs-fixer: ^3.12
- georgringer/news: ^14.0
- helmich/typo3-typoscript-lint: ^3.3
- move-elevator/composer-translation-validator: ^1.3
- phpstan/extension-installer: ^1.3
- saschaegerer/phpstan-typo3: ^3.0
- symfony/translation: ^7.2
- typo3/cms-filelist: ^13.4 || ^14.0
- typo3/cms-lowlevel: ^13.4 || ^14.0
- typo3/cms-setup: ^13.4 || ^14.0
- typo3/cms-webhooks: ^13.4 || ^14.0
- typo3/cms-workspaces: ^13.4 || ^14.0
- typo3/testing-framework: ^9.5
Suggests
- typo3/cms-lowlevel: Provides the Configuration module in TYPO3 backend where the TCA API configuration tree is displayed
Conflicts
- typo3/cms-core: 13.4.33 || 14.3.5
This package is auto-updated.
Last update: 2026-08-25 10:35:40 UTC
README
TYPO3 extension tca_api
This TYPO3 extension exposes database tables as Hydra JSON-LD resources through a configuration-driven REST API. Drop a PHP array into Configuration/TcaApi/ naming the table, and the extension handles routing, serialization, filtering, sorting, pagination, validation, and access control — no controllers, no Extbase models.
<?php // EXT:my_ext/Configuration/TcaApi/Articles.php return [ 'general' => [ 'table' => 'tx_myext_domain_model_article', 'resourceName' => 'articles', 'resourceType' => 'Article', ], ];
That is a complete, read-only API at /_api/articles, including an OpenAPI spec and Swagger UI. Everything beyond it is opt-in.
✨ Features
Resource definitions — Expose a table by registering a PHP array
- Full CRUD (
list,show,create,update,delete); reads are on by default, writes are explicit - Serialization groups control which columns appear per operation
- Override third-party configs the way TYPO3's
TCA/Overrides/works
Querying — Exact, partial, word-start, range, full-text and MM filters
- Relation-path filters (
categories.title) reach across up to three hops - Sorting, offset pagination, and sparse fieldsets (
?fields[]=…)
Security — Per-operation roles, from PUBLIC to record-level OWNER
- Write privilege model with actor-aware writes, a table deny list, and audit logging
- Validation auto-derived from TCA, with structured
422responses
Serialization — Every TCA field type handled, relations resolved
- Relations as IRI strings or embedded records, created inline on write
- Virtual properties, image processing, speaking URLs and file uploads
Multi-language & caching — Production concerns handled
- URL base segments and an
X-Localeheader resolve theSiteLanguage - Tag-based response caching, invalidated automatically by the DataHandler
OpenAPI — Spec and Swagger UI generated from the registered resources
- Interactive Swagger UI at the API prefix, plus a backend module on TYPO3 v14
- Compatible with API Platform and its admin
Extensibility — Every layer is replaceable
- Custom operation handlers, filters, validators and column processors
- PSR-14 events around every operation and every write
🔥 Installation
Requirements
- TYPO3 13.4 LTS or 14.3+
- PHP 8.2+
Composer
composer require maikschneider/tca-api
TER
Download the zip file from TYPO3 extension repository (TER).
📂 Setup
The extension ships a TYPO3 site set. Add it to your site's config/sites/<site>/config.yaml, or via
Site Management → Sites in the backend:
dependencies: - maikschneider/tca-api
The API then responds under /_api/. Prefix, pagination defaults, CORS and OpenAPI access are
site settings,
editable under Site Management → Sites → Settings.
📙 Documentation
Please have a look at the official extension documentation.
A runnable demo covering a range of configurations lives at maikschneider/typo3-petstore.
🧑💻 Contributing
Please have a look at CONTRIBUTING.md, and join the
discussions — feedback on the architecture,
security model and design decisions is very welcome.
🔒 Security Policy
Please read our security policy if you discover a security vulnerability in this extension.
⭐ License
This project is licensed under GNU General Public License 2.0 (or later).