„RESTovske WS volime vtedy ak sa jedna o Webovu aplikaciu a Webovu kommunikaciu.“
Což je právě ten pragmatický přístup, o kterém jsem psal (a který nemusí být vždy v souladu s logikou a filosofií RESTu).
Ale co vybrat, když jsme na webu a potřebujeme procedurální API? Buď to zprasíme a budeme REST používat tak, jak se nemá (jako RPC) nebo si naopak upravíme svoje potřeby (vymyslíme si nějaké zdroje, aby šly napasovat na REST) a nebo REST jednoduše opustíme a použijeme jiný způsob (z toho pak vychází, že REST není tak univerzální jako SOAP služby, viz minulý díl seriálu – což neber jako kritiku RESTu, každá technologie má své použití a své hranice, to je normální).
„WS-* volime vtedy, ked nam ide o protokol agnostic interakciu medzi proprietarnymi alebo legacy systemami a zaroven si to zakaznik vyslovne zela (vendor lock :).“
Sorry, ale tohle mi přijde jako vyloženě házení špíny na SOAP webové služby. S proprietárním SW nic společného nemají – snad leda to, že existují i proprietární implementace – ale stejně tak lze realizovat SOAP WS klienta i server čistě pomocí neproprietárního/svobodného softwaru. A „vendor lock-in“? Klienta k RESTu i SOAPu mi může napsat kdokoli (tzn. nejsem vázaný na původního dodavatele) a pokud to rozhraní (definice SOAP služeb, metod, parametrů nebo naopak vnitřního formátu používaného v RESTu) bude nějak nestandardní a nenahraditelného čímkoli jiným, budu odkázaný na původního dodavatele bez ohledu na to, zda jde o SOAP nebo REST.
„Ako suvisi strojova citatelnost reprezentacii v REST SW so strojovou citatelnostou WSDL?“
U RESTu jsou strojově čitelná data (zdroje), která mi služba vrátí – ale jak zjistím, jaké má mít služba vstupní parametry nebo URL? Jako příklad si můžeme vzít ten Geocoding od Googlu (služba na převod adres na souřadnice).
URL vypadá takhle:
http://maps.google.com/maps/api/geocode/xml?sensor=false&address=_sem_přijde_adresa_
Jsou tu nějaké parametry (sensor, address, language atd.). Jak ale zjistím, jak se tyhle parametry jmenují? Jedině z dokumentace. V případě SOAP a WSDL bych si je zjistil právě v tom WSDL a dokumentace by dost možná ani nebyla potřeba, protože by mi došlo, že do address se bude dávat adresa. Ale když WSDL nemám, jak mám zjistit, že je to „address“ a ne třeba „addr“? WSDL je také možné použít pro vygenerování GUI pro obecnou službu (třeba na otestování, vyzkoušení) – vykreslí se formuláře pro jednotlivé parametry, jako třeba v tom ?Tester. U RESTu by něco takového snad šlo realizovat s tím WADL – jenže když nezapadá do filosofie RESTu a lidi ho odmítají používat, tak je to pak těžké.
„Ako je spomenute vyssie, pri preferovanom SOAP Document/literal tiez nie je format dokumentu/spravy formalne specifikovany, co nie je nedostatok, ale pozadovana vlastnost.“
Viz Loosely typed versus strongly typed Web services citovaný v článku. Pomocí SOAP služeb je možné udělat silně typované služby i slabě – v RESTu na výběr není, tam jsou obecně slabě typované (nepočítám MIME typ – mluvím o formátu přenášených dat, třeba toho XML).
„Nielen ze existenciu WADL odmietaju vyvojari, ale REST definuje sposob ako samopopisnosti sluzienb a teda WADL nema v ponimani RESTu zmysel. Ak sa hovori o existencii WADL v suvislosti s REST, je to dokaz nepochopenia RESTu a znacnej dezinterpretacie prace Roya Fieldinga.“
V podstatě souhlasím. Jen jde o to, že tohle důsledné dodržování filosofie RESTu celkem dost omezuje množství úloh, na které ho lze nasadit. Např. na jednom webu jsem nedávno narazil na aplikaci, která umožňuje navrhnout si vlastní terasu a spočítat její cenu (člověk zadá tvar a rozměry a vyleze mu z toho cena). Typická procedurální záležitost – předám parametry proceduře/funkci a ta mi vrátí výsledek. Žádné zdroje tu v principu nejsou – jen si můžeme vytvořit nějaké pseudozdroje. Kdybychom se řídili čistě logikou věci, tak bychom měli použít SOAP službu. Když budeme chtít použít REST, tak si můžeme vytvořit nějaký pseudozdroj jako „požadavek na výpočet ceny“ a ten pomocí RESTu vložíme (POST) a pak si vyzvedneme (GET) jiný zdroj s výsledkem výpočtu. Případně můžeme ty parametry funkce nacpat do URL jako GET parametry a provést vše v jednom kroku. Ano, je to překroucení a zneužití RESTu a možná už to ani není REST (technologicky ano, významově ne), ale dokážu pochopit, že někdo takovou aplikaci vytvoří (to jsou ty pragmatické důvody, z webu by se mu SOAP služba volala o něco hůř).
„Z tejto vety je zrejme, ze autor clanku si dezinterpretuje REST.“
To je zase dezinterpretace článku :-) Píšu, že to lze a že to někteří dělají – ale ne, že by to bylo správné nebo že bych takový postup doporučoval. Viz „což ale neznamená, že bychom to nutně měli dělat“
„Google SOAP API mozno zatial este ocenime, ale nie nadlho“
Ty dvě věty byly možná trochu nešťastně v jednom odstavci hned za sebou. Ano, Google upustil od veřejného SOAP API a používá REST API (viz první věta).
„Google skratka upustil od SOAP a od roku 2006 preferuje jedine REST API. A Google je spicka v IT a teda predpokladame, ze dobre vedia, preco to robia. My to vieme tiez. :)“
A co ten Geocoding Service a spousta dalších příkladů v jejich API? Opravdu to Google dělá tak dobře a dodržuje striktně filosofii RESTu? Mně spíš přijde, že on si ho taky dost přiohnul, aby šel použít pro procedurální věci. Resp. neměli bychom tomu jeho API říkat REST, ale spíš „HTTP-based RPC interface“?
„ze dobre vedia, preco to robia.“
IMHO je to pragmatický ústupek klientům resp. programátorům na straně klienta a webovým aplikacím – snadněji se tam pracuje s RESTem (nebo s HTTP API) než se SOAPem. A taky asi neochota udržovat dvoje API pro jednu věc (náklady). Nějaké hlubší myšlenky bych v tom moc nehledal.
„ucime sa cely zivot“
+1 :-)