Maggior numero possibile in JavaScript è 9007199254740992 in base alle domanda posta nel StackOverflow What is JavaScript's highest integer value that a Number can go to without losing precision?
Se si confrontano questi valori
9007199254740992 // the JS maximum
10151194520072941 // the Base64 encoded number
Se certamente si presenta come Facebook è internamente - per motivi che non conosciamo - la memorizzazione valori troppo grandi per la precisione del numero di JavaScript da gestire.
Quindi, a me sembra che non avessero altra possibilità che gestire numeri come stringhe.
Ovviamente potevano usare solo "10151194520072941"
come numero in formato stringa, ma alcuni programmatori potrebbero confondere questo come un numero. Anche se questo accade raramente, probabilmente pensavano che Base64 codificando il numero evitasse il problema di qualcuno che convertisse la stringa in numero intero.
Inoltre, poiché questa è funzione API pubblica, non viene utilizzata dai propri ingegneri, quindi il rischio è ancora più elevato, perché le persone che utilizzano l'API provengono da diversi contesti educativi. Potrebbero utilizzare accidentalmente ad esempio parseInt o simili al numero risultante in richieste di assistenza clienti non necessarie.
MODIFICA: L'utilizzo di numeri molto grandi potrebbe anche servire a un altro scopo: rilevare l'abuso intenzionale dell'API.Se usassero per esempio valori UUID casuali o valori numerici consecutivi, qualsiasi valore close-by potrebbe essere potenzialmente legale. Se si tratta di un UUID, devono prima fare la richiesta per vedere se si tratta di una voce legale. Avendo una grande base di numeri potrebbe essere che solo ogni 1000 è legale o seguono qualche altra regola matematica che può essere rilevata da un singolo server, senza richieste ad altri server, smistando i client che stanno costruendo intenzionalmente richieste con valori illegali diventa molto più efficace e forse può essere filtrato prima che raggiungano i database.
fonte
2015-06-27 21:51:28
Nel caso in cui non l'avessi visto, ho modificato la mia risposta qualche giorno fa con altre possibili spiegazioni. –
Base 64 avrebbe senso solo come meccanismo di "compattazione" se si codificassero grandi numeri a 64 bit in una rappresentazione stampabile. Per esempio. '' len ('\ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x01'.encode (' base64 ')) = 13'' e '' len (' 72057594037927936 ') = 17''. L'unica ragione per cui vedo questa decisione è di offrire un'interfaccia più opaca. Sta dicendo "non contare su questo numero per essere qualcosa di significativo". –