On Mon, Aug 18, 2008 at 11:51:15PM +0200, Richard Mihalovič wrote:
> Dik za odpoved, rad si precitam aj tu doplnenu cast, lebo som nejak
> vsetko nepodchytil ... :) v podstate ak som spravne pochopil je len na
> mne ci budem parametre predavat pomocou GET alebo POST.
 
Presne tak. REST neni o tom, v jake reprezentaci prenest data z jedne strany
na druhou, ale jakym zpusobem aplikaci navrhnout.

> Popripade ak by si mohol uviest nejake zdroje: knihy, best patterns
> ktore sa oplati precitat.
 
Mam-li byt uprimny, tak krome bible RESTU (Fieldingova Dizertacka, kde REST
definuje) jsem ja osobne zadnou knihu necetl. V dobach, kdy jsme s RESTem
v Systinetu zacinali, to jeste nebyl buzzword, takze se o nem knihy netiskly.

Staci se podivat na amazon - 
http://www.amazon.com/s/ref=nb_ss_b?url=node%3D1000%2C5%2C3510&field-keywords=REST&x=9&y=17
 a clovek zjisti, ze jich ani
moc neni. Kazdopadne podle referenci znamych neni RESTful WebServices 
(na amazonu v searchi na REST je hned prvni, takze asi tak) vubec spatna.

V cestine jsem nic o RESTu nevidel.

> Zatial co som cital rozne zdroje (hlavne web) tak mam pocit ze REST je
> natolko volny az je z toho miestami anarchia a chaos a kazdy si to
> vysvetluje po svojom :)

Ano. Proto jsem psal o CHYRU okolo RESTu. REST je dost casto zjednodusovan
na HTTP a z toho prameni jeho nepochopeni.
 
Na druhou stranu nikde nerikam, ze mam patent na rozum (natoz na REST),
takze i moje tvrzeni nemusi vzdy odpovidat. Proto kazde opraveni vitam.

> A ked uz som natrafil na cloveka ktory sa REST-u venuje, by som sa
> spytal este na par veci ktore mi nie su uplne jasne:
> 
> 1) referencia namiesto obsahu
> 
> preco sa vo vacsine xml/json suborov uvadza referencia na zdroj na
> miesto obsahu ?
> 
> napr.
> 
> <order ref="http://....";>
>       <item ref="http://server/item/1"/>
>       <item ref="http://server/item/2"/>
>       <item ref="http://server/item/3"/>
> </order>
> a nie uplny obsah napr:
> 
> <order number="abc" id="123">
>       <item>
>               <id>1</id>
>               <catalogNumber>a123</catalogNumber>
>               <price>12,55</price>
>               ...
>       </item>
>       ...
>       <item>
>       </item>
> </order>
> Mi pripada logicke nacitat viac udajov naraz, ako sa potom dotazovat na
> kazdy zaznam po jednom requeste (teda aspon mam pocit ze by to mohlo byt
> rychlejsie :).

Ono se samozrejme pouziva obeho pristupu. Pristup referenci je naprosto jasny:
zdroj neni nic jineho nez BAG (collection) jinych zdroju. Vyhoda je v tom,
ze onen zdroj, onen batoh, zkratka nezajima, jak ony zdroje vypadaji.
Vem si, ze by tvuj batoh mel vedet dopredu vsechno o vsech vecech, ktere
do nej nekdy v budoucu prijdou a mel s nimi umet pracovat. One je proste
umi jenom uschovat v sobe.

Druhy postup byva principialne jakasi proxy, ktera umi vzit onen batoh a jeho
obsah a pokud rozumi vsemu, co uvnitr je (coz u objednavky a jejich polozek
lze ocekavat), umi je vratit kompletne vyrenderovane. Dost casto byva tato
proxy implementovana jako "jina reprezentace" onoho batohu. Predstav si to
tak, ze onen batoh ma URI http://mujstroj/mojeaplikace/mujbatoh a pri ziskavani
jeho obsahu pouzijes dva parametry - ?withLinks nebo ?withContent

Je to uz jasnejsi?

> 
> 2) navratove kody operacii
> Tu su znova dve moznosti, bud budem vracat vysledok kazdej operacie ako
> HTTP status code/header (404-Not found, 200-Ok, 201-Created,
> 202-Accepted,...) alebo ako XML subor typu:
> 
> <response code="error">
>       <error>resource not found</error>
> </response>
> 
> alebo dokonca ako kombinaciu HTTP status code a XML
 
Jak uz jsem psal ciste zalezi na tobe. Osobne bych doporucoval spojeni obeho,
kdy 404 nemusi nic obsahovat, kdezto 201-Created by mohl vracet byt cely obsah
vyvtoreneho zdroje nebo minimalne jeho URL, protoze typicky se operace CREATE
implementuje na kolekci zdroju daneho typu.
 
> 3) protokol
> 
> > HTTP je pouze jendim z RESTovych protokolu, ktery se typicky
> > pouziva jako transportni protokol pro jiny RESTovy protokol.
> 
> existuje aj nejaky iny protokol ktory sa realne pouziva ?
 
Samozrejme. Napriklad WebDAV ci FTP, ktere maji dokonce i svuj vlastni
transportni protokol ;-)  Pokud se jedna o REST over HTTP, pak naprilad ATOM.
 
> No na dalsie veci sa radsej spytam nabuduce ;)

Uz se tesim ;-) Kazdy dotaz se pak pokusim nejak rozebrat v oRESTovani,
ale az na to bude cas ;-) A ze bych to pak vydal knizne ? :-D LOL

Oto 'tapik' Buchta

> 
> RM
> 
> On Mon, 2008-08-18 at 11:07 +0200, Oto Buchta wrote:
> > 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