Come salvare lo status di un’app all’interno di un URL codificato (GUIDA)

Aggiornato il: 10-01-2023 11:33
Lavorando su vari generi di app fruibili sul web (mediante sito, per intenderci, con o senza registrazione che sia) tipicamente lo sviluppatore deve fronteggiare una serie di problematiche legate allo “status” (stato) dell’utente che sta accedendo. Quelle che di solito in PHP sono dette variabili di sessione, in sostanza, racchiudono informazioni sull’utente come i dati su cui sta lavorando personalmente, ad esempio, o comunque informazioni lato client che devono essere memorizzate da qualche parte.





Tutto questo, tuttavia, comporta che sia il server a sobbarcarsi dell’incarico di memorizzare quei dati, creando così un carico di lavoro notevole, una fase di debug estremamente laboriosa nonchè potenziali problemi di privacy per l’utente (dove vengono salvati quei dati? Con quale crittografia? Cosa succede in caso di violazioni? E se un povero programmatore non volesse salvare questi dati sul server, potrebbe farlo sul serio?

URL con hashbang

Una possibile alternativa è quella di fare uso di URL univoci che siano associati ad ogni utente, un po’ come fossero un “codice fiscale”: bisognerà quindi scegliere un modo per criptare questi dati, sfruttando la notazione cosiddetta hashbang:

knotend.com/g/a#N4IgzgpgTglghgTxgLwnARgiAxA9lAVxAC5QA7X

(NB knotend.com è un servizio web, sia gratuito che a pagamento che serve a creare online diagrammi di flusso)

Tutto ciò che segue “/g/a#” non è altro che un oggetto JSON, seguendo questo approccio, che contenga al suo interno tutti i dati di lavoro dell’utente, ovvero il suo payload univoco. La possibilità in questione consiste nel prendere l’oggetto JSON, comprimerlo, codificarlo in BASE 64, per ottenere poi la stringa in questione. Il codice sarebbe pertanto su questa falsariga:

//fase 1
const stateString = JSON.stringify(appState); // appState is a json object
const compressed = compress(stateString);
const encoded = Base64.encode(compressed);

//fase 2
const decoded = Base64.decode(encoded); // same encoded as above, but read from url
const uncompressed = uncompress(decoded);
const newState = JSON.parse(uncompressed);

La cosa interessante è che si farebbe tutto in Javascript senza usare linguaggi lato server, con ovvi vantaggi di cui sopra e la possibilità di integrarlo in qualsiasi app in qualsiasi linguaggio di programmazione. Possibili algoritmi per comprimere, per inciso, sono pronti all’uso e sono open source, come ad esempio pako, che emula il classico zlib in linguaggio Javascript.

L’idea è buona e può ispirare una nuova generazione di applicazioni serveless a tutti gli effetti, che risparmino tempo e risorse a provider e programmatori. Ovviamente questo ha delle conseguenze che vanno valutate con attenzione: in primis bisogna capire se valga la pena farlo, se il gioco valga la candela e se l’approccio sia effettivamente scalabile.

In teoria dovrebbe esserlo, anche se giureremmo per esperienza che possa non essere così e che la codifica, in alcuni casi, possa essere difficile da rendere reversibile. Questo perchè il formato URL prodotto deve essere scalabile e riconducibile all’originale in qualsiasi momento, altrimenti è inutile; e poi perchè le varie fasi necessarie devono avvenire con grande velocità per evitare di rallentare o rendere inusabile l’app.

(ispirato liberamente a https://www.scottantipa.com/store-app-state-in-urls)



Questo blog pubblica contenuti ed offre servizi free da 11 anni. – Leggi un altro articolo a caso – Per informazioni contattaci
5/5 (1)

Ti sembra utile o interessante? Vota e fammelo sapere.

Come salvare lo status di un’app all’interno di un URL codificato (GUIDA)
pexels energepiccom 313690 scaled
Torna su