Strict Mode
Kurzantwort: Der Strict Mode entscheidet, ob eine unzulässige Anfrage einen
Fehler auslöst oder still ignoriert wird. Er steht pro Request im
RequestContext und wird aus der Umgebungsvariablen STRICT_MODE vorbelegt –
Standard true.
Wo er wirkt
Abschnitt betitelt „Wo er wirkt“| Situation | strikt (true) | tolerant (false) |
|---|---|---|
| Rolle für die Operation fehlt | MissingPermissionException (403) | Prüfung liefert false, es kommen keine Daten |
| Lesezugriff auf ein Modell ohne Recht | Abbruch | null bzw. leeres Ergebnis |
Verschachteltes Anlegen ohne RecursiveType.CREATE | RecursiveOperationNotAllowed (400) recursive-create-not-allowed|<feld> | der Eintrag wird verworfen, das Feld bleibt leer |
| Angefordertes Feld existiert nicht oder ist nicht erlaubt | Fehler | Feld wird weggelassen |
Nicht vom Strict Mode betroffen:
- ein fehlender
@typebeim Anlegen auf einer abstrakten Beziehung – der ist immer Pflicht (400 mit Feldbezug) - die Feldvalidierung – Regelverstöße sind immer ein 422
- die Mandantenprüfung – Routingfehler scheitern immer
Herkunft des Wertes
Abschnitt betitelt „Herkunft des Wertes“private boolean strictMode = Boolean.parseBoolean(System.getenv().getOrDefault("STRICT_MODE", "true"));Der Wert wird beim Anlegen des RequestContext gesetzt und gilt für den
gesamten Request einschließlich aller Rekursionsebenen.
Warum überhaupt tolerant?
Abschnitt betitelt „Warum überhaupt tolerant?“Der tolerante Modus ist für Aufrufer gedacht, die mit einer breiten Anfrage
(["*"]) arbeiten und nicht wissen können, welche Felder ihr Benutzer sehen
darf: Sie bekommen, was erlaubt ist, statt eines Fehlers. Für alles andere ist
true die richtige Einstellung – ein still verschlucktes Feld oder ein still
verworfenes Kindobjekt ist ein Fehler, der erst spät auffällt.
Empfehlung
Abschnitt betitelt „Empfehlung“STRICT_MODE=true in allen Umgebungen. Wer tolerantes Verhalten braucht,
sollte das gezielt und dokumentiert tun, nicht als Standardeinstellung.