Ciao Sto utilizzando ColdFusion per chiamare l'API last.fm, utilizzando un pacchetto cfc originario di here.Frequenza di limitazione delle chiamate a un API che utilizza la cache in ColdFusion
Sono preoccupato di passare oltre il limite di richieste, ovvero 5 richieste per indirizzo IP di origine al secondo, in media su un periodo di 5 minuti.
Il bundle cfc ha un componente centrale che chiama tutti gli altri componenti, che sono suddivisi in sezioni come "artista", "traccia" ecc ... Questo componente centrale "lastFmApi.cfc." è iniziata nella mia richiesta, e protratto per la durata dell'applicazione
// Application.cfc example
<cffunction name="onApplicationStart">
<cfset var apiKey = '[your api key here]' />
<cfset var apiSecret = '[your api secret here]' />
<cfset application.lastFm = CreateObject('component', 'org.FrankFusion.lastFm.lastFmApi').init(apiKey, apiSecret) />
</cffunction>
Ora, se voglio chiamare l'API attraverso un gestore/regolatore, ad esempio mio gestore artista ... posso fare questo
<cffunction name="artistPage" cache="5 mins">
<cfset qAlbums = application.lastFm.user.getArtist(url.artistName) />
</cffunction>
Sono un po 'confuso verso il caching, ma sto memorizzando nella cache ogni chiamata all'api in questo gestore per 5 minuti, ma questo fa alcuna differenza, perché ogni volta che qualcuno colpisce una nuova pagina artista questo non conta come un nuovo colpito contro l'api?
Chiedendosi il modo migliore per affrontare questo
Grazie
Ciao grazie per la tua risposta, sto solo cercando di capire meglio. Mi chiedo dove mettere * yourCacheStruct *, in application.cfc? Anche questo metodo sembra limitare le chiamate per funzione, piuttosto che le applicazioni? I. E puoi fare solo 5 richieste per indirizzo IP originario al secondo, in media su un periodo di 5 minuti. Queste richieste possono provenire da qualsiasi punto dell'applicazione, dal gestore di pagine dell'artista sopra, o forse da un gestore di pagine di traccia.Quindi l'applicazione deve garantire che tutte le chiamate da qualsiasi luogo non superino il limite – namtax
Ho modificato il codice in questa risposta per dare una comprensione più chiara di come memorizzare la cache nello scope dell'applicazione. A lungo termine, potrei considerare di aggiungere un controller di cache che gestisca tutta la memorizzazione nella cache dei dati tramite alcune chiamate di funzione, piuttosto che riscriverlo in ogni metodo che deve fare uso del caching; ma questo dovrebbe darti un'idea di come è fatto. –
Non sono sicuro del motivo per cui @zarko ha deciso di mettere 'cache =" 5 mins "nella definizione della funzione. Non fa nulla se non aggiungere alcuni metadati personalizzati. –