Come gestire dati potenzialmente obsoleti dall'API di WikiMedia

0

Sto scrivendo un'applicazione web che estrae piccole parti di articoli da Wikipedia e li presenta agli utenti.

Non desidero cancellare le voci degli articoli perché non voglio inviare una quantità ridicola di richieste all'API di WikiMedia, caricandole inutilmente.

La mia domanda è, dato che Wikipedia è naturale, collaborativa e dinamica, quale sarebbe il modo migliore per offrire agli utenti contenuti ragionevolmente aggiornati (il contenuto non deve riflettere l'articolo corrente al 100%, ma non dovrebbe essere troppo indietro) senza interrogare costantemente i loro server?

Sono propenso a archiviare i frammenti degli articoli nel mio database insieme a un timestamp e ogni volta che un utente richiede un articolo con un timestamp su x giorni, vorrei ri-interrogare l'API e aggiornare la voce nel mio database.

L'altro problema con questo è che sto afferrando gli articoli tramite Javascript sul lato client, quindi chiamando un'API sul mio server per memorizzarlo. L'aggiornamento di un articolo sarebbe simile a:

Articolo sulle query degli utenti - > il mio server restituisce l'articolo - > il controllo sul lato client decide che il timestamp è troppo vecchio - > il lato client richiama WikiMedia e visualizza il contenuto all'utente - > client-side attiva la richiesta al mio server per memorizzare i dati.

Sembra che potrebbe essere fatto meglio, ma non voglio interrogare WikiMedia direttamente dal mio server ...

Come potrei renderlo migliore?

Architettura: framework SlimPHP, driver RethinkDB + PHP, jQuery / JS, HTML, CSS

    
posta theintellects 26.11.2013 - 22:47
fonte

2 risposte

1

Non è una buona idea archiviare sul tuo server dati provenienti da client (possibilmente dannosi).

client-side fires request to my server to store the data.

Poiché il codice lato client è nelle mani del cliente, non è possibile alimentare il server con dati falsi?

Quindi il tuo livello di caching dovrebbe decidere quali articoli ricaricare sul lato server in base al tempo trascorso dall'ultima sincronizzazione, ed eventualmente sincronizzare la richiesta del cliente.

Per ridurre il carico sui server peer, puoi richiedere solo l'intestazione HTTP (vedi HEAD su Wikipedia e Risposte ). In questo modo le risposte del server istantaneamente non hanno bisogno di generare un'intera pagina in modo dinamico.

    
risposta data 27.12.2013 - 11:00
fonte
0

La prima cosa che mi viene in mente è usare la cache proxy. Il proxy deve rispettare la direttiva cache dall'API; nessuna programmazione richiesta.

L'altro modo per farlo è implementare un qualche tipo di cache con il tuo algoritmo preferito. Anche se si va in questo modo se il carico del server è elevato, si dovrebbe mettere un proxy anche come proxy inverso o solo proxy o entrambi.

Il modo migliore è mettere un proxy e avere un profilo in modo da sapere dove ottimizzare.

    
risposta data 26.11.2013 - 23:32
fonte

Leggi altre domande sui tag