Diky za vycerpavajucu odpoved, za to uz by si si zasluzil aj nejake pivo :) Niektore veci su mi uz jasnejsie a niektore si este musim nechat prejst hlavou ...
Na dnes snad uz len jedna otazka :) Ake api/frameworky/tooly pouzivate pri vyvoji REST aplikacii? Ja momentalne pouzivam tieto veci: server/klient cast(JAVA): Restlet (http://www.restlet.org/) binding XML (JAVA): JAXB klient (FIREFOX): Poster RM On Tue, 2008-08-19 at 09:39 +0200, Oto Buchta wrote: > 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
