Tvuj problem je v nekolika omylech, ktera prameni z chyru kolem RESTu:
a) REST != CRUD . REST je o definici maleho mnozstvi operaci nad vsemi
  zdroji daneho systemu. Jako priklad uvedu HTTP operace HEAD a OPTIONS.
b) REST != HTTP . HTTP je pouze jendim z RESTovych protokolu, ktery se typicky
  pouziva jako transportni protokol pro jiny RESTovy protokol.
c) URI nereprezentuje presnou datovou podobu zdroje pro READ operace.
  URI reprezentuje zdroj jako takovy. Kazda operace muze byt parametrizovana.
  Podstatne je, aby opakovane READ operace na stejny zdroj vracely byt ruzne,
  ale semanticky shodne reprezentace zdroje. Jako priklad opet uvedu onu
  HTTP operaci HEAD, ktera vraci pouze "metadata" zdroje. Dalsim prikladem
  z HTTP je moznost rict si o preferovany jazyk vysledku.

Co z toho plyne?

Zaved si pro kazdy typ zdroje jejich kolekci, na teto kolekci zaved operaci
QUERY (nebo FILTER, jak chces) a tato operace bude mit logicky dva parametry:
1) URL kolekce
2) vlastni query

Pak uz zalezi ciste na tobe, jaky udelas binding na HTTP. Muzes pouzit query
string GETove operace (ta je mimochodem taky dvouparametrova, URL
a QUERY_STRING, pricemz druhy parametr je nepovinny) nebo POST a query posilat
v datech. 

Na http://tapikuv.blogspot.com/2008/08/orestoven-dotazy.html to zkusim behem
tydne trochu vic rozvest.

On Sat, Aug 16, 2008 at 02:25:03PM +0200, Richard Mihalovič wrote:
> Zdravim konfereneciu
> 
> Zacinam s REST a zakladne principy som snad pochopil (CRUD ->
> POST,GET,PUT,DELETE). Ale neviem presne ako realizovat filtrovanie
> zaznamov.
> 
> Napriklad:
>  mam zoznam uzivatelov ktory maju polozky: age, firstName, lastName,
> atd. Ak chcem nacitat vsetky zaznamy tak dam GET request na adr.
> 'http://adresa.server/users' vrati mi zoznam vsetkych uzivatelov. Ale ak
> by som chcel filtrovat zaznamy podla kriterii napr:
>     firstName='James' AND lastName!='Bond' OR age>40
> Akym sposobom sa dotazovat k tymto zaznamom ? Napadaju ma nasedovne
> sposoby:
> 
> 1) cely dotaz dat do URL:
> 
> http://adresa/users/search/v1,s1,c1,o1: ... :vn,sn,cn,o1/orderby/xyz/...
> 
> n=1..m
> vn - variable, napr: 'firstName' 
> sn - string, napr: 'James'
> cn - condition, napr. 'eg' = equals, 'gt' = greater than, ...
> on - operator, napr. 'a' = AND, 'o' = OR
> 
> V tomto pripade by sa cely dotaz zapisal do URL a po zavolani GET
> request by sa vratil vyfiltrovany obsah. Tento sposob mi pripada asi
> najviac RESTful, ale ta url by bola asi dost dlha v niektorych
> pripadoch.
> 
> 2) dotaz zakodovat do XML
> 
> <query orderby="...">
>       <filter variable="..." string="..." condition="..." operator="..." />
>       <filter variable="..." string="..." condition="..." operator="..." />   
> </query>
> 
> V tomto pripade by sa muselo XML asi poslat cez request POST alebo PUT a
> nasledne spracovat, ale metody POST, PUT sluzia na ine ucely a asi to
> nie je 'validne' REST riesenie.
> 
> 3) nejak inak :) rad sa necham poucit ...
> 
> 
> RM

Odpovedet emailem