Penso che questa sia una questione di approccio, e tu hai ragione nel "non vedere i benefici" di tale restrizione. Il tuo servizio ha un'API definita; alcune voci richiedono dati strutturati (comandi e oggetti dati), altri elaborano flussi (caricamento file). Se lo vedo in questo modo, non vedo alcun problema.
- Se devi accettare qualcosa come stream, non forzare nessuno a utilizzare un formato improprio (ora JSON), ma permetti loro di inviarti quel file nel modo più naturale. Non si tratta di "infrangere" alcune regole, ma il modo più semplice per fare il lavoro. BACIO.
- Se devi elaborare le gerarchie di dati dal client: comandi e oggetti, sì, è bello dare uno, e forse il modo più semplice per inviarti gerarchie, JSON va bene. Per i tuoi clienti.
Ma per te all'interno del servizio, non è vantaggioso vedere effettivamente JSON, perché si tratta solo di una sintassi del flusso e dei componenti del gestore (lo stesso esiste per XML e forse anche altri formati). I tuoi codici non hanno bisogno di JSON, hanno bisogno di gerarchie di dati. Quindi il mio consiglio qui è di nascondere il fatto che ora usi il formato e i gestori JSON, da tutti i tuoi codici di livello superiore. Le opzioni:
- deserializza in istanze di oggetti reali all'interno della tua piattaforma,
- converti in una gerarchia di Maps, dizionari o simili
- o nascondi gli oggetti del nodo JSON reali dietro una semplice interfaccia con i metodi getAttribute, getChildren, ecc.
Qualche tempo dopo potresti non essere in grado di forzare un client a usare JSON, perché i loro sistemi comunicano attraverso XML, possono solo usare forme semplici senza JavaScript, o i loro dati sono in realtà in un database. Allora amerai il concetto di avere JSON invisibile al resto del tuo codice con uno dei metodi sopra indicati: dovrai solo scrivere il prossimo wrapper per quel XML (o il pacchetto di parametri di richiesta HTTP, qualunque cosa), e hai finito: lo stesso API e codice possono essere raggiunti tramite un altro "linguaggio dei dati".
Almeno questo è come lo vedo io.