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.

Muzete urite cast kriterii predat v ramci query parametru, nejen primo v URI.
Predpokladam, ze nektera kriteria jsou nepovinna...

> 
> 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.

Napsal jste to sam: Pokud pouzivate HTTP, pro ziskani dat ze serveru
slouzi vyhradne GET. Kdyz uz byste to chtel komplikovat,
muzete pouzit dvojici requestu:

POST/PUT pro vytvoreni "noveho" resource na serveru, sediciho na napr. adrese:
http://.../users/queries/1

tj. POST na http://.../users/queries/ by vam vratilo v location hlavicce: 
http://.../users/queries/1
nebo, pokud byste chtel, aby kontrolu nad URI mel klient, pak klidne primo PUT
na http://.../users/queries/1

a pak GETem byste  z toho cetl data, ktera by mohla byt treba na

http://.../users/queries/1/data

~Jakub

> 
> 3) nejak inak :) rad sa necham poucit ...
> 
> 
> RM
> 

-- 
http://blogs.sun.com/japod

Odpovedet emailem