Es gibt keine andere Norm als den gesunden Menschenverstand, um gegen das Gesetz zu verstoßen oder es zu verbieten. Abstrahiert man dies wie zwei Menschen, die sich unterhalten, so ist der Standard die beste Art und Weise, wie sie sich mit einem Minimum an Worten in einem Minimum an Zeit genau verstehen können. In unserem Fall bedeutet "minimale Wörter" die Optimierung der Bandbreite für die Transporteffizienz, und "genaues Verstehen" ist die Struktur für die Effizienz des Parsers, was letztendlich darauf hinausläuft, dass je weniger Daten vorhanden sind und je allgemeiner die Struktur ist, desto besser können die Daten durch ein Nadelöhr passen und durch einen gemeinsamen Bereich geparst werden (zumindest anfangs).
In fast allen vorgeschlagenen Fällen sehe ich getrennte Antworten für das "Erfolgs-" und das "Fehlerszenario", was für mich eine Art von Unklarheit darstellt. Wenn die Antworten in diesen beiden Fällen unterschiedlich sind, warum brauchen wir dann wirklich ein "Erfolg"-Flag? Ist es nicht offensichtlich, dass die Abwesenheit von "Fehler" ein "Erfolg" ist? Ist es möglich, eine Antwort zu haben, bei der "Erfolg" WAHR ist, während ein "Fehler" gesetzt ist? Oder so, dass 'Erfolg' FALSCH ist, ohne dass 'Fehler' gesetzt ist? Nur ein Flag ist nicht genug? Ich würde es vorziehen, nur das 'Error'-Flag zu haben, weil ich glaube, dass es weniger 'Error' als 'Success' geben wird.
Sollten wir den "Fehler" wirklich zu einer Flagge machen? Was ist, wenn ich mit mehreren Validierungsfehlern antworten möchte? Ich halte es für effizienter, einen "Fehler"-Knoten mit jedem Fehler als Kind dieses Knotens zu haben, wobei ein leerer "Fehler"-Knoten einen "Erfolg" bedeuten würde (der zu Null gezählt wird).