Rethink Table API’s, Fast Development, Secure Access
André Borngräber, Ottmar Gobrecht
APEX Meetup 17.06.2016, Frankfurt
Warum?
Schnelligkeit
- Standardcalls für CRUD-Operationen
- Hilfsmethoden für eindeutige Schlüssel
Lesbarkeit
- Kürzerer Code
- Einheitliche Methodennamen
- Wiedererkennungseffekte
Wartbarkeit
- API’s generierbar
- Strukturänderungen einfacher durchführbar
- Invalide API-Calls in Businesslogik schnell behebbar
Sicherheit
- Trennung zwischen Daten- und UI-Schema einfach
- Löschen von Datensätzen abschaltbar
Historisierung, Logging
- API feuert nur bei Änderungen
- Keine unnötigen Zeilen bei Updates
Kompatibilität
- APEX Wizard getriebene Formulare werden unterstützt (Multirow-DML)
- View und Instead Of Trigger werden generiert pro Tabelle
- Trigger ruft API auf
- APEX Prüfung auf veränderte Zeilen bleibt erhalten
One Last Thing: Avoid Hard-Coding SQL
… sagt Steven Feuerstein
Keine versteckten DML Statements in APEX
- Prozessen
- Dynamic Actions
- Validierungen
- …
Wie?
Open Source Projekt
github.com/OraMUC/table-api-generator
PL/SQL & SQL Developer Integration (oddgen)
begin
om_tapigen.compile_only (p_table_name => 'EMP');
end;
Features
- Generiert schmale, übersichtliche API-Packages
- Löschen von Zeilen kann deaktiviert werden
- Spalten- und zeilenbasierte CRUD-Methoden
- Getter und Setter für jede Spalte
- Optionales Sequence-Handling
- Optionales generisches Logging
- Hilfsfunktionen:
row_exists
get_pk_by_unique_cols
Konventionen
Der API-Generator setzt aktuell voraus, dass …
- … es einen einspaltigen, numerischen Primärschlüssel gibt (Surrogatschlüssel, kein sprechender Schlüssel)
- … fachliche Schlüssel als eindeutige Schlüssel definiert werden (optional, dann wird pro Unique Key eine
get_pk_by_unique_cols
Funktion erstellt)
Beispiele
Demozeit …
Nächste Schritte
In Planung
Generierungsoptionen in API-Packages hinterlegen
- Dokumentation
- Logger-Integration
- Historisierung über Parameter aufnehmen? Slowly Changing Dimensions (Typ 2)
- Eure Wünsche und Ideen?
- …
The End
Fragen?
Euer OraMUC-Team
André & Ottmar