Sto progettando un'API REST per i miei client mobili per interagire con il nostro server delle app (costruito con Django / django-rest-framework se fa alcuna differenza).
Ci sono diversi oggetti accessibili tramite l'API, alcuni cambiano frequentemente (diciamo ogni giorno), alcuni quasi mai cambiano (in media meno di una volta al mese), e alcuni per i quali solo alcuni record annidati cambieranno (pensa un post sul blog per il quale aggiungiamo nuovi commenti un paio di volte al giorno).
Poiché i clienti sono sensibili al volume di trasferimento dei dati (per motivi di costo, dati mobili nel paese in via di sviluppo), voglio limitarlo, soprattutto quando scaricano un elenco di oggetti (ad esempio: l'elenco degli oggetti dei post di blog menzionati in precedenza) . Il trasferimento dei dati è di gran lunga la mia più grande preoccupazione qui, molto prima del caricamento lato server.
Ho pensato di utilizzare qualcosa di simile all'header If-Modified-Since
HTTP ( link sezione 14.25), che potrebbe funzionare su singole richieste di oggetti, come GET /api/blogposts/<id>/
. Ma con un'elevata latenza di rete (i tempi di ping di oltre 500 ms sono comuni), eseguire dozzine o centinaia di richieste sembra una cattiva idea.
Per ottenere una raccolta di record, mi aspetto che il seguente comportamento aiuti di più nel mio caso (le richieste di cui sto parlando sono simili a quelle descritte in questa risposta : raccolte personalizzate per utente)
GET /api/myblogposts/
inizialmente restituirebbe un elenco JSON di oggetti, non solo gli ID:
[
'post1': {...},
'post2': {...},
...
'postN': {...}
]
Quindi un successivo GET sullo stesso url con l'intestazione appropriata If-Modified-Since: Sat, 29 Oct 2016 19:43:31 GMT
filtra l'elenco per restituire solo i record modificati da allora. Il client può quindi unire le modifiche nel suo archivio dati locale.
Questa strategia sembra avere un senso? Esiste uno standard esistente per client e server per negoziare quale sottoinsieme di record trasferire?