Negli ultimi due anni, ho giocato con le nuove tecnologie nei miei progetti collaterali. Come sviluppatore web, sono andato dal seguente (e ancora il seguente, al lavoro):
Lo stack tecnologico "classico"
- Moduli POST per browser Web per ...
- a C # -coded application server-side, che comunica con ...
- servizi esterni via XML, quindi in definitiva ...
- scrivere lo stato dell'applicazione su un database SQL.
Per usare un arrangiamento molto diverso:
Lo stack tecnologico completamente dinamico
- Browser Web che invia XmlHttpRequests a ...
- un Node.js con codice JavaScript codificato sul lato server, che comunica con ...
- altri servizi esterni tramite servizi RESTful in JSON, in definitiva ...
- scrivere lo stato dell'applicazione in un database non SQL
È arrivato al punto in cui il mio intero stack ha assolutamente nessuna applicazione di tipo o schema, ovunque .
Ora, questo è stato benissimo prima, quando si consumano servizi web di altri. Potrebbe anche essere andato bene fino a quando i database SQL non sono stati abbandonati (insieme ai loro schemi DB). Ma ora sono bloccato a:
Dove posso dichiarativamente definire qual è la struttura valida dei dati del mio dominio aziendale?
Voglio far valere la validità dei dati prima di rendere pubblicamente disponibili i miei progetti - dopo tutto, cosa impedisce a qualcuno di inviare solo dati non validi ai miei servizi, e di utilizzarli tutti come un semplice provider di database libero da hacky? Ad un certo punto, si deve far rispettare che "questo servizio web accetterà solo una raccolta di almeno un X. X deve contenere A, B e facoltativamente C".
La prima soluzione che ho pensato era di fare la convalida all'interno del mio node.js, attraverso un grosso blocco di codice imperativo / if-elses / etc. Questo mi sembrava sbagliato.
Utilizzo CouchDB e per un po 'ho pensato che sarebbe stato meglio inserire il codice di convalida nei _update
handler. Almeno stiamo eseguendo la convalida come parte della persistenza, ma è ancora un brutto blocco imperativo.
Successivamente, ho esaminato i linguaggi dello schema JSON. Non c'è uno standard per quanto posso vedere e non ero sicuro delle molteplici soluzioni offerte. Potrei creare il mio, ma poi espanderei solo il corpo dei linguaggi di schema JSON non standard.
XML? Potrei inserire X in AJAX e averli convalidati sullo schema sul lato server. Tuttavia, ciò non sembra seguire le tendenze nello sviluppo del software. Nessuno dei due avrebbe usato un archivio dati XML invece di un livello di persistenza MongoDB CouchDB / BSON JSON.
Quindi, sono bloccato. Idee?
TL; DR dove definisco in modo dichiarativo la struttura valida dei dati del mio dominio aziendale quando non utilizzo alcun linguaggio statico orientato agli oggetti e nessun database SQL legato allo schema nel mio stack tecnologico? È possibile che ci sia qualche tipo di tipizzazione statica (o schema DB, o XML validato) da qualche parte per uno stack tecnologico che abbia senso? Se sì, dove?