Als Teil eines umfangreichen Testfalls entwickle ich eine Ajax-basierte CMS-ähnliche Anwendung, die CRUD-Funktionalität auf verschiedenen Dokumententypen bietet, z. B. Artikel, Tags, etc.
auf der Server- und Clientseite Ich überlege, JSON-Schema ( Ссылка ) als eine Möglichkeit zu verwenden, Benutzereingaben vorzunehmen Validierung auf DRY-Art (dh 1 Validierungsschema, sowohl auf der Server- als auch auf der Client-Seite, kein Duplicate-Code und all das). Das scheint großartig, denn:
JSON-Schema ist sowohl in JS als auch in Java implementiert, so dass ein Schema theoretisch eine clientseitige und eine serverseitige Validierung durchführen könnte
Alle CUD-Operationen Anfragen und Antworten sind JSON (über Ajax)
Neben den üblichen Validierungen für Benutzereingaben möchte ich jedoch zusätzliche Prüfungen auf dem Server durchführen (z. B. prüfen, ob der Name eines Tags, den ein Benutzer erstellen möchte, bereits existiert)
Idealerweise möchte ich, dass diese Art von Prüfungen in meinen allgemeinen serverseitigen Validierungscode aufgenommen wird (der wie gesagt auf JSON-Schema basiert). Ich bin jedoch nicht ganz davon überzeugt, dass dies der richtige Ansatz ist, da diese zusätzlichen Prüfungen nicht nur auf den bereitgestellten JSON-Daten basieren, sondern zusätzliche Daten zur Validierung benötigen (z. B. die Namen vorhandener Tags im System, um zu prüfen, ob ein Tag-Name existiert bereits).
Wäre es also eine gute Idee (Entwurf / Architektur), zusätzliche Prüfungen wie die oben beschriebenen in das json-Schema-basierte Validierungs-Framework auf der Serverseite einzubauen? Wäre das eine elegante Lösung? Oder würdest du sie getrennt halten? Wenn nicht, warum nicht und welche andere Alternative würden Sie vorschlagen, bei der Client- und Server-seitigen Validierung DRY zu bleiben?
Was denkst du?
Einige zusätzliche Kontext / Ziele des Textfalls unten für einige Hintergrundinformationen.
Danke, Geert-Jan
Einige Kontext / Ziele:
ajax-basiertes CMS mit REST-Ansatz
CUD-Anfragen werden durch Ajax unter Verwendung eines Ruhe-Ansatzes ausgeführt (d. h.: Zuordnung auf POST, PUT, DELETE). Anfragen und Antworten werden alle über JSON erledigt.
CMS ohne Formulare. Verwenden Sie stattdessen die direkte Bearbeitung (z. B. mit Aloha-Editor: Ссылка
bleib trocken.
Templating: erfolgt durch Moustache Templating auf Client- und Server-Seite. Intiales Rendering und inkrementelles Rendering durch Ajax erfolgen basierend auf 1 und der gleichen Vorlage. Ich wollte etwas anderes als Moustache (wegen mangelnder Ausdruckskraft) wählen, aber es funktioniert zumindest für diesen Prototyp. (Siehe vorherige Frage nach Alternativen, auf denen ich noch nach einer Antwort suche: Client-seitige Templating-Sprache mit Java-Compiler (DRY templating) )
DRY-Eingabe-Validierung: wie oben beschrieben
Validierungsfluss (im Falle eines Fehlers):
Benutzer erstellt / aktualisiert / löscht das Objekt.
Ein Validierungsfehler auf dem Client würde dem Benutzer sofort Feedback geben, was zu reparieren ist. (Der Javascript-JSON-Schema-Validator würde idealerweise JSON zurückgeben, das für den Benutzer formatiert ist)
Wenn die clientseitige Validierung erfolgreich ist, wird die CUD-Operation mit ajax durchgeführt.
Wenn die serverseitige Validierung fehlschlägt, wird ein Statuscode 400 (ungültige Anforderung) mit einem Json-Objekt zurückgegeben, das die Validierungsfehler enthält, die von jquery's Fehlerrückruf
empfangen werden %Vor%JSON-Objekt, das serverseitige Validierungsfehler enthält, wird dem Benutzer (analog zur Clientseite) angezeigt
Es ist sehr möglich und eine der befriedigendsten Sachen, eine einzige Definition von Validierungen an einer Stelle (pro Modell) auf dem Server zu haben, die dann geeignete JS für clientseitige und AJAX-basierte Validierungen generieren kann.
>Yii framework für PHP hat eine fantastische Architektur, um dies auf elegante Weise zu erreichen, indem alle Validierungsregeln zusammen im Modell gespeichert werden (je nach Bedarf in geeignete "Szenarien" unterteilt). Von dort aus geht es darum, ein paar Schalter umzuschalten, um ein bestimmtes Formular clientseitig oder AJAX-validierbar zu machen. Ich glaube, Yiis Schnittstellen hierfür basierten auf Rails.
Wie auch immer, ich würde Ihnen wärmstens empfehlen, die folgenden Schlüsselpunkte aus dem Design von Yii auszuprobieren; Auch wenn Sie PHP nicht kennen, können Sie dies zur Inspiration verwenden:
CModel::rules()
= & gt; Die DRY-Quelle für Modellvalidierungsregeln CActiveForm
= & gt; Wird zum Generieren von Formularelementen basierend auf Modellattributen verwendet
CActiveForm::textField()
CValidator
= & gt; Basisklasse für Validierer, die für die Fähigkeit zur Client-Validierung vorsieht
Ich halte es für sinnvoll, die Deklaration der DRY-Validierungsregel zu verfolgen, und meiner Erfahrung nach ist es überhaupt nicht unrealistisch, diese 100% zu erreichen und immer noch reichhaltige Formen- und umfassende Validierungsregeln zu haben. (Und Junge, wirst du das Leben lieben, wenn du nicht alle Klienten verwalten musst, die JS validieren ...)
Hoffe, das hilft.
Tags und Links json dry validation