componist / mini-api
Config-driven read-only API for Laravel. Expose your data via simple GET requests—define routes, tables or Eloquent models, columns, and relations in one config file. Optional API key auth.
Requires
- php: ^8.2
Requires (Dev)
None
Suggests
None
Provides
None
Conflicts
None
Replaces
None
This package is auto-updated.
Last update: 2026-09-21 17:55:25 UTC
README
Config-gesteuerte read-only JSON-API unter /api/{route}. Endpoints (Tabelle oder Eloquent-Model, Spalten, Relationen) werden in config/mini-api.php definiert — optional mit API-Key-Auth.
Installation
Im Monorepo registriert (Componist\MiniApi\MiniApiServiceProvider).
php artisan vendor:publish --tag=mini-api-config
Konfiguration
Config-Key: mini-api.
Key / .env |
Beschreibung |
|---|---|
MINI_API_AUTH_ENABLED |
Auth an/aus (Standard: true) |
MINI_API_KEY |
API-Key (Header X-Api-Key oder Query api_key) |
MINI_API_MAX_ROWS |
Row-Limit (Standard: 500) |
endpoints |
Endpoint-Definitionen (explizite columns, kein *) |
blocked_tables / blocked_fields |
Blocklisten |
MINI_API_IMPORT_URL / MINI_API_IMPORT_KEY |
Live-URL und API-Key für mini-api:import |
MINI_API_IMPORT_PER_PAGE |
Zeilen pro Import-Request (Standard: 500) |
MINI_API_BUILDER_ENABLED |
Builder-UI (Standard: false) |
MINI_API_BUILDER_ONLY_DEV |
Builder nur bei APP_DEBUG |
Nutzung
- Öffentliche Endpoints:
GET /api/{route}(Throttle60,1) - Builder (wenn aktiv):
GET /mini-api-builderhinterweb+auth
Beispiel-Endpoint in Config:
'endpoints' => [ 'posts' => [ 'table' => 'posts', 'columns' => ['id', 'title', 'created_at'], ], ],
Pagination
Ohne Parameter liefert ein Endpoint wie bisher bis zu limit Zeilen. Mit ?page=N&per_page=M wird stabil nach Primärschlüssel sortiert paginiert (per_page ist durch limit/max_rows gedeckelt). Die Antwort bleibt ein JSON-Array, die Meta-Infos stehen in den Headern X-Total-Count und X-Last-Page. Ohne Primärschlüssel: 'order_by' => 'spalte' im Endpoint setzen.
Daten der Live-Anwendung importieren
# .env (lokal): MINI_API_IMPORT_URL=https://live.example.com, MINI_API_IMPORT_KEY=<MINI_API_KEY der Live-App> php artisan mini-api:import # interaktiv: Endpoints + Modus wählen php artisan mini-api:import posts --mode=update # nicht interaktiv php artisan mini-api:import posts --mode=fresh --force
- Quelle sind die lokalen Endpoint-Definitionen (
table,columns,route); die Live-App muss die Endpoints mit gleicher Route bereitstellen und die Pagination dieser Version kennen (sonst wird nur die erste Seite gelesen). update: Upsert per Primärschlüssel (muss incolumnsstehen), nichts wird gelöscht.fresh: löscht den Inhalt der gewählten Tabellen (nicht der ganzen Datenbank) und importiert neu, mit Bestätigung. Pro Tabelle in einer Transaktion: bei einem Fehler bleibt der alte Stand.- Lokal fehlende oder gesperrte Spalten (
blocked_fields,blocked_tables) werden übersprungen und gemeldet. Gesperrte Felder wiepasswordkommen deshalb nie mit. - Fremdschlüssel-Prüfungen sind während des Imports deaktiviert.
- Model-Endpoints und Joins werden nicht importiert. In
productionist der Command gesperrt. - Den Key besser über
.envals über--keysetzen (Shell-History).
Commands
| Command | Beschreibung |
|---|---|
php artisan mini-api:generate-key |
Erzeugt einen API-Key |
php artisan mini-api:import |
Importiert Live-Daten über die Mini-API (fresh/update) |
php artisan mini-api:config-from-database |
Hilft beim Generieren von Endpoint-Config aus dem Schema |
Berechtigungen
- API: bei aktivierter Auth ohne gültigen Key → 401
- Builder-Routen: Middleware
web+auth(kein separates Admin-Gate) - Schema-Guard filtert blockierte Tabellen/Felder; kein
SELECT *
Tests
php artisan test --compact --testsuite=MiniApi
Hinweise
- Endpoints in Root-/published Config pflegen (Package-Default: leeres
endpoints) - Builder nur lokal/debug nutzen; Production: Key setzen und Builder auslassen