Un noto stato attuale della tecnica consiste nell'utilizzare un servizio API RESTful sul back-end e il front-end è responsabile della visualizzazione dei dati e dell'invio di richieste / comandi al server. Questo di solito avviene attraverso semplici richieste HTTP a URL con un significato speciale, ma molte altre varianti funzionano generalmente allo stesso modo (con alcuni dettagli variabili - pensa SOAP, ecc.)
Nel tuo caso, il front-end si carica e chiama un GET a /nodes
, che restituisce un JSON dal tuo back-end al tuo front-end con la struttura del nodo completo come hai delineato.
L'utente vuole spostare un nodo, quindi il front-end potrebbe POST a /nodes/move/{nodeToMove}/{nodeDestination}
. Il back-end tenta di eseguire il comando e quindi restituisce ... beh, cosa vuole che il front-end lo restituisca? Puoi solo restituire successo / fallimento, oppure puoi restituire l'intera nuova struttura. Questo dipende dalla tua situazione particolare - e se non hai bisogno di restituire l'intera nuova struttura o la struttura è molto grande, allora non restituirla.
Come il front-end mostra questo è ... bene, fino alla persona front-end e dipenderà dal caso d'uso, e non c'è una risposta universale - si tratta di massimizzare l'usabilità umana. Il front-end può "assumere il successo", ma poi dovrà capire come gestire con grazia il problema quando ritorna un errore o se i dati non sono più sincronizzati. Cosa succede se l'utente richiede di spostare il nodo G sotto il nodo 1, quindi elimina il nodo 2 e tutto ciò che si trova al di sotto di esso. Se il primo comando non è riuscito, il secondo comando potrebbe cancellare qualcosa involontariamente!
Quindi la domanda è su quando bloccare l'interfaccia utente - e la risposta varia in base al tuo caso d'uso e ad altri aspetti di ciò che il tuo programma sta effettivamente facendo. Quando un comando che modifica i dati è stato emesso, solitamente è meglio bloccare ulteriori modifiche fino a quando il primo comando non è stato verificato, oppure si verificano situazioni strane, come provare a modificare un file che è stato eliminato o che è attualmente in corso copiata (la copia mostrerà queste modifiche?), ecc.