Paginazione in risposta HTTP

di il
9 risposte

Paginazione in risposta HTTP

Salve a tutti,
premetto che sono un novizio nella programazione in generale quindi se sbaglio qualcosa non linciatemi
Detto ciò, sto creando un'app in java con android studio che deve comunicare con un sito di film e serie tv.
Ho effettuato la registrazione al sito e aggiunto alla mia history un centinaio di film di test.
Ora scorrendo nelle APIs fornite dal sito ho trovato un metodo (http get) per farmi restituire la mia history sotto forma di array di oggetti Json,
quindi creato il collegamento tramite http con metodo GET il sito mi restituisce un array json contenente soltato i primi 10 elementi della lista.
Controllando sempre nelle APIs ho notato che il sito di default per quel metodo restituisce l'array in pagine da 10 elementi ciascuna.
La mia domanda è: c'è un modo per "spostarsi" da una pagina all'altra tramite la connessione http creata? e se si, come?

Grazie in anticipo a chi perderà qualche minuto per rispondermi.

9 Risposte

  • Re: Paginazione in risposta HTTP

    Bananajoe01 ha scritto:


    La mia domanda è: c'è un modo per "spostarsi" da una pagina all'altra tramite la connessione http creata? e se si, come?
    Se c'è una documentazione di quella API, dovrebbe spiegarlo (se c'è la paginazione e fatta come).
    Se hai un link alla documentazione, possiamo fare una verifica (abbastanza, spero) veloce.


    P.S. non esiste un solo, unico, modo per gestire la paginazione nelle response di servizi web. Ci possono essere svariate strategie generali e anche tecnicamente modi diversi per richiedere e rappresentare le "pagine". Quindi ripeto, se c'è una documentazione (valida, si spera) di questa API, lo dovrebbe spiegare.
  • Re: Paginazione in risposta HTTP

    Innanzitutto grazie per la risposta
    Nella API c'è la sezione sulla paginazione, ma indica soltanto una stringa da appendere alla richiesta per far visualizzare un tot numero di pagine che hanno un tot numero di elementi (?page={page}&limit={limit}), cosa che tra l'altro ho provato ad insierire nella richiesta (mettendo un limite di 100) ma mi restituisce sempre i primi 10 elementi.

    Comunque la sezione è questa qui: https://trakt.docs.apiary.io/#introduction/paginatio
  • Re: Paginazione in risposta HTTP

    Bananajoe01 ha scritto:


    Nella API c'è la sezione sulla paginazione, ma indica soltanto una stringa da appendere alla richiesta per far visualizzare un tot numero di pagine che hanno un tot numero di elementi (?page={page}&limit={limit}), cosa che tra l'altro ho provato ad insierire nella richiesta (mettendo un limite di 100) ma mi restituisce sempre i primi 10 elementi.
    Quindi mi stai dicendo che se passi blabla?page=1&limit=100 oppure blabla?page=3&limit=100 ottieni sempre solo 10 elementi?? (e chiaramente sai che ci devono essere più di 10 elementi)

    Mah ..
  • Re: Paginazione in risposta HTTP

    andbin ha scritto:


    Quindi mi stai dicendo che se passi blabla?page=1&limit=100 oppure blabla?page=3&limit=100 ottieni sempre solo 10 elementi?? (e chiaramente sai che ci devono essere più di 10 elementi)
    Esatto, per la richiesta utilizzo il seguente codice:
     URL url = new URL("https://api.trakt.tv/users/dechk/history/movie/?page={1}&limit={300}");
                URLConnection con = url.openConnection();
                HttpURLConnection http = (HttpURLConnection) con;
                http.setRequestProperty("Content-Type", "application/json; charset=UTF-8");
                http.setRequestProperty("trakt-api-version","2");
                http.setRequestProperty("trakt-api-key",client_id);
                http.connect();
                
    e ho come risultato sempre i primi 10 elementi.
  • Re: Paginazione in risposta HTTP

    Prendendo spunto dalla domanda che mi hai fatto ho eliminato le parentesi graffe dalla stringa che ho messo in coda alla richiesta e ora magicamente mi restituisce la pagina richiesta con il limite da me settato.

    Quindi era solo una questione di parentesi

    Comunque il mio dubbio rimane, per farmi restituire le altre pagine devo quindi eseguire altre richieste specificando le pagine?
    e se volessi avere in risposta l'intera mia history (utile per sincronizzarla con un database in locale all'applicazione) non sapendo di quante pagine è composta?
  • Re: Paginazione in risposta HTTP

    Bananajoe01 ha scritto:


    ho eliminato le parentesi graffe dalla stringa che ho messo in coda alla richiesta e ora magicamente mi restituisce la pagina richiesta con il limite da me settato.

    Quindi era solo una questione di parentesi
    Le graffe infatti NON servono!! Quella con le graffe è solo la forma generalizzata per un URL template (vedi: https://en.wikipedia.org/wiki/URL_Templat) dove ciò che sta come {qualcosa} indica semplicemente un "segnaposto" dove ci dovrà essere messo qualcosa di concreto.
    Viene usato tipicamente a livello di documentazione (detto in generale) ma anche in modo specifico con certe API dove si può passare ad esempio una stringa come "blabla?page={page}&limit={limit}" e poi la API stessa può espandere questa stringa utilizzando una mappa di dati chiave->valore.
    Ma in sostanza quando verrà fatta la request HTTP, quelle graffe e quei nomi "segnaposto" NON ci saranno. Ci sarà qualcosa di concreto.

    Bananajoe01 ha scritto:


    Comunque il mio dubbio rimane, per farmi restituire le altre pagine devo quindi eseguire altre richieste specificando le pagine?
    Ovviamente

    Bananajoe01 ha scritto:


    e se volessi avere in risposta l'intera mia history (utile per sincronizzarla con un database in locale all'applicazione) non sapendo di quante pagine è composta?
    Per avere "tutto" probabilmente potrebbe bastare un limit molto elevato. Ma a patto che il servizio non metta dei paletti del tipo, il limit max 10000 altrimenti errore (o altro).
    Ma comunque non capisco i tuoi dubbi. La documentazione che hai linkato è ragionevolmente molto chiara: in risposta hai degli header che danno quelle informazioni, ovvero quanti elementi totali ci sono e quante pagine totali ci sono (quest'ultimo dedurrei: basandosi sul limit che hai richiesto).
  • Re: Paginazione in risposta HTTP

    andbin ha scritto:


    Le graffe infatti NON servono!! Quella con le graffe è solo la forma generalizzata per un URL template (vedi: https://en.wikipedia.org/wiki/URL_Templat) dove ciò che sta come {qualcosa} indica semplicemente un "segnaposto" dove ci dovrà essere messo qualcosa di concreto.
    Viene usato tipicamente a livello di documentazione (detto in generale) ma anche in modo specifico con certe API dove si può passare ad esempio una stringa come "blabla?page={page}&limit={limit}" e poi la API stessa può espandere questa stringa utilizzando una mappa di dati chiave->valore.
    Ma in sostanza quando verrà fatta la request HTTP, quelle graffe e quei nomi "segnaposto" NON ci saranno. Ci sarà qualcosa di concreto.
    Ti ringrazio, mi mancava questo "passaggio"

    andbin ha scritto:


    Per avere "tutto" probabilmente potrebbe bastare un limit molto elevato. Ma a patto che il servizio non metta dei paletti del tipo, il limit max 10000 altrimenti errore (o altro).
    Ma comunque non capisco i tuoi dubbi. La documentazione che hai linkato è ragionevolmente molto chiara: in risposta hai degli header che danno quelle informazioni, ovvero quanti elementi totali ci sono e quante pagine totali ci sono (quest'ultimo dedurrei: basandosi sul limit che hai richiesto).
    Il dubbio che era rimasto era più che altro sul fatto se esistesse o meno un metodo standard per far restituire tutta la lista e non utilizzare un artefatto tipo quello che hai citato tu impostando un limite massimo elevato.

    Ti ringrazio ancora per l'aiuto

    Posterò sicuramente qualche altro dubbio/problema che riscontrerò nella progettazione dell'app spero di trovarti sempre qui
  • Re: Paginazione in risposta HTTP

    ATTENTO: non puoi sperare di svicolare i limiti della paginazione semplicemente impostando un numero di elementi per pagina molto alto.
    COMUNQUE lato server non ti permetono di fare quello che vuoi.

    Il motivo e' ovvio: LIMITI di memoria (un pisquano qualunque mi chiede UN MILIONE di elementi), tempo di generazione della risposta JSON (i dati devono essere serializzati per generare il JSON, mica nasce miracolosamente!), accesso al database, ed n-mila altre rognette.

    QUINDI: ti conviene supportare la paginazione!
  • Re: Paginazione in risposta HTTP

    migliorabile ha scritto:


    ATTENTO: non puoi sperare di svicolare i limiti della paginazione semplicemente impostando un numero di elementi per pagina molto alto.
    COMUNQUE lato server non ti permetono di fare quello che vuoi.

    Il motivo e' ovvio: LIMITI di memoria (un pisquano qualunque mi chiede UN MILIONE di elementi), tempo di generazione della risposta JSON (i dati devono essere serializzati per generare il JSON, mica nasce miracolosamente!), accesso al database, ed n-mila altre rognette.

    QUINDI: ti conviene supportare la paginazione!
    Si appunto non volevo usare un limite massimo elevato, sarò costretto ad implementare la paginazione
Devi accedere o registrarti per scrivere nel forum
9 risposte