Come restituire RESTfully articoli casuali?
Domanda
Il mio design espone due tipi di risorse:
- Immagini
Vorrei che i clienti potessero richiedere immagini casuali con i loro tag. Ad esempio: Dammi immagini casuali che sono taggate con " New York " e "Inverno". Come sarebbe un design RESTful in questo caso?
Soluzione
Per riassumere tutta la discussione nei commenti e non cambiare la mia proposta iniziale, questo è quello che vorrei fare finalmente:
Desideri accedere alle immagini tramite tag; ogni tag si riferisce a una serie di immagini. Dato che un determinato tag può essere usato molto più di un altro (diciamo, le foto di New York hanno usato molto più di quelle di Chicago), dovresti usare una configurazione RESTful che consenta la memorizzazione nella cache, così puoi memorizzare nella cache le foto di New York. IMHO, la soluzione sarebbe:
-
Ogni immagine ha un URI fisso:
http://www.example.com/images/12345
-
Ogni tag ha anche un URI:
http://www.example.com/tags/New_York/random
Questo URI funge da dispatcher casuale di immagini sul set; restituisce una 303 Vedi Altro , reindirizzando a un'immagine casuale dell'insieme. Per definizione , questo URI non deve essere memorizzato nella cache, e quello fisso dovrebbe, e il browser non dovrebbe capire che il reindirizzamento alla seconda risorsa è permanente, quindi è ottimale.
-
Puoi persino accedere all'intero set tramite:
http://www.example.com/tags/New_York
Questo accesso comporterebbe un 300 scelte multiple risposta; restituisce l'intero set (come URI, non come immagini!) al browser e il browser decide cosa fare con esso.
-
Puoi anche usare l'intersezione di vari tag:
http://www.example.com/tags/New_York/Autumn/Manhattan/random http://www.example.com/tags/Autumn/Manhattan/New_York/random (equivalent to the previous one) http://www.example.com/tags/New_York/girls/Summer/random etc.
Quindi hai un URI fisso per ogni immagine, un URI fisso per ogni tag e il relativo set di foto e un URI fisso per un dispatcher casuale che ha ogni tag. Non è necessario utilizzare alcun parametro GET come altre potenziali soluzioni, quindi è RESTful il più possibile.
Altri suggerimenti
Ho lottato con questo problema. Ciò che abbiamo finito per implementare era un HttpResponseRedirect, ad esempio:
http://www.example.com/randomNewYorkImage
a un'immagine casuale di New York:
http://www.example.com/images/New_York/1234 .
La prima risorsa può essere concepita come un dispatcher di immagini casuale di New York. Questa soluzione caricherà di più il server, poiché verranno richieste due risorse, ma è RESTful il più possibile.
Modificato: Inoltre, se stai memorizzando nella cache, ogni immagine sarà nella cache e il tuo server passerà dall'invio di un'immagine all'invio del solo reindirizzamento, poiché la cache intercetterà la seconda richiesta e alleviando così il carico del server.
L'identificazione delle risorse multidimensionali è impegnativa.
La tua risorsa è un'immagine, quindi questo è il tuo URI. Inoltre, un'immagine specifica ha un URI specifico che non cambia mai.
Il tuo " per tag " è un attributo non identificativo della risorsa. Per questo, una stringa di query può essere d'aiuto.
Ecco il mio primo pensiero.
http://www.example.com/MyStuff/image/
id/
- immagine specifica per IDhttp://www.example.com/MyStuff/image/?tag=
tagname - immagine casuale con un determinato tag, implicitamente,count = 1
.http://www.example.com/MyStuff/image/?tag=
tagname& amp; count = all
- all immagini con un determinato tag in un ordine casuale (count = 1
è l'impostazione predefinita, che ti darebbe un'immagine arbitraria)
Farei qualcosa come http://foo.com/image/tagged/sometag/random
e smetterei di perdere il sonno.
Sono d'accordo con Triptych su questo. In un certo senso l'aggiunta casuale alla fine dell'URI lo fa sembrare un'operazione, ma se è mirato a un tag, stai semplicemente perfezionando il contesto.
Nel suo esempio di:
/ immagine / tag / sometag / random
risorsa immagini - > ambito di tagging (tutte le immagini con tag) - > tag specifico (tutte le immagini con tag X) - > random (una risorsa dall'elenco di immagini con ambito con tag X)