Al momento, la mia interfaccia REST (piuttosto standard) si presenta così:
POST /foo # creates a new foo
PUT /foo/{id} # updates a specific foo
GET /foo/{id} # returns a specific foo
GET /foo # returns a collection of foos
Solo i client autenticati sono in grado di utilizzare queste operazioni. Quando si utilizza GET
o PUT
, i client possono solo recuperare o manipolare le proprie istanze foo. Quindi chiamare GET /foo
restituisce solo un elenco di foos di un particolare utente, non tutti i foos esistenti.
Quello che voglio fare ora è introdurre una ricerca conforme a REST. Di solito dovresti semplicemente aggiungere parametri all'URI, qualcosa del genere:
GET /foo?param1=val1¶m2=val2&...
Tuttavia, in questo caso, voglio che i clienti siano in grado di cercare tutti i foo e quindi recuperare i foos che non necessariamente appartengono a loro. Ovviamente le rappresentazioni delle risorse apparirebbero un po 'diverse, senza dati sensibili del cliente.
Perché dovrei farlo, qual è lo scopo?
Immagina un'asta online per le auto. Un utente dovrebbe essere in grado di ottenere un elenco delle proprie aste attive (le macchine che desidera vendere) utilizzando GET /cars
. D'altra parte, gli utenti che cercano un'auto dovrebbero essere in grado di eseguire una ricerca, ad esempio GET /cars?color=metallic-blue
.
Ma penso che non sia una buona idea usare lo stesso URI sia per la ricerca che per l'elenco delle proprie aste (nonostante le operazioni bot restituiscano macchine), principalmente perché le rappresentazioni delle risorse della risposta sarebbero leggermente diverse (ad esempio la ricerca restituisce un risultato più generale senza dati sensibili). Ma come altro potrei farlo? Basta introdurre un nuovo URI, forse qualcosa come GET /cars/search?..
?