API/Backend Rework
Geplant ist zuerst das Backend parallel zur normalen Entwicklung zu überarbeiten, um eine ordentliche API mit Hilfe einer OpenAPI Definition zu planen. Aus der Definition soll das neue Grundgerüst erzeugt werden und vorhandene Funktionen im neuen Grundgerüst eingebaut werden. Sofern möglich kann bisheriger Code umstrukturiert werden, um die Aufteilung und den logischen Aufbau zu verbessern.
Zugehöriger Branch: backend_rework
Vorschläge an Tools:
- Definition der API mit OpenAPI
- Erzeugung eines Grundgerüsts im PHP Slim Framework mit Hilfe vom OpenAPI Generator
- Slim4 Beispiel: https://github.com/odan/slim4-skeleton
- Automatische Überprüfung von Anfragedaten mit Hilfe von RespectValidation
- Redoc zur automatischen Erzeugung einer API Dokumentation im GitLab CI/CD Prozess
- Implementierung von Tests mit PHPUnit und automatischer Ausführung im GitLab CI/CD Prozess
- Implementierung von API Tests
ToDo:
-
OpenAPI Definition der bisherigen Funktionen bauen und Struktur vereinheitlichen -
Backend-Template erzeugen -
Aufbau/Struktur planen -
Bisherige Funktionen in neue API-Aufrufe übertragen (Refactoring des Codes soweit einfach möglich) -
API Tests implementieren -
Umstellung des Frontends auf die neue API
Aufbau/Struktur/Ideen
- Backend Pfad
/api
- PHP Slim für Grundaufbau
- Middleware für Authentifizierung?
- Middleware für CSRF Protection?
- Middleware für Input Validation?
- Monolog zum Logging
-
/api/src/utils
:- Authorization
- Configuration Management
-
/api/src/db
:- DBClass
- Migration
- Configuration mit Default-Werten + Overwrite-Werten
- Mapping von Konfigurationsvariablen zu Namen/Beschreibungen (für Anzeige in Oberfläche)
- Konfiguration in einem Array speichern; Arrays mit array_replace_resurcive() mergen
Workflow für API Änderungen
- OpenAPI Definition anpassen (
api/secdoc-api.yml
) - Definition mit OpenAPI Generator auf Fehler prüfen:
openapi-generator-cli validate -i secdoc-api.yml
- Slim-Skelett mit OpenAPI Generator aktualisieren:
openapi-generator-cli generate -g php-slim4 -i secdoc-api.yml --global-property apis,apiTests=false,supportingFiles
- Unter
api/src/
die zugehörigen Klassen/Funktionen implementieren