{"id":23,"date":"2012-05-29T19:02:03","date_gmt":"2012-05-29T17:02:03","guid":{"rendered":""},"modified":"2018-09-17T21:57:34","modified_gmt":"2018-09-17T19:57:34","slug":"anatomia-rest-sietovych-sluzieb","status":"publish","type":"post","link":"https:\/\/spireng.sk\/en\/anatomia-rest-sietovych-sluzieb\/","title":{"rendered":"Anat\u00f3mia REST sie\u0165ov\u00fdch slu\u017eieb"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" class=\"imgp_img\" style=\"float: left; margin: 2px 5px;\" src=\"\/sites\/default\/files\/imagepicker\/1\/dsfsd54.jpg\" alt=\"Obr\u00e1zok\" width=\"200\" height=\"215\" \/>\u201eZnovuzjednotenie webu\u201c. Aj tak\u00fdto n\u00e1zov m\u00e1 jedna z kapitol knihy <em>RESTFul web services<\/em> od <em>Leonarda Richardsona<\/em> a <em>Sama Rubyho<\/em>. Kniha nie je len popisom toho, ako REST sie\u0165ov\u00e9 slu\u017eby vyzeraj\u00fa, ale hlavne silnou obhajobou, pre\u010do ich pou\u017e\u00edva\u0165. A tie\u017e toho, pre\u010do s\u00fa v prostred\u00ed internetu viac prirodzen\u00e9 ako ich star\u0161ie pr\u00edbuzn\u00e9 &#8211; SOAP slu\u017eby.<!--more--><\/p>\n<p><!--break-->Jednou z hlavn\u00fdch my\u0161lienok, ktor\u00e1 sa prel\u00edna celou knihou je, \u017ee SOAP slu\u017eby posunuli pou\u017e\u00edvanie internetu (ako mno\u017einy r\u00f4znych \u0161tandardov) do \u00farovne, ktor\u00e1 je silne vzdialen\u00e1 jeho zvy\u0161ku. Aby ste rozumeli o \u010dom hovor\u00edm, tu je uk\u00e1\u017eka z toho, ako fungoval HTTP protokol niekedy v jeho \u00faplnom za\u010diatku:<\/p>\n<p style=\"padding-left: 30px;\">Po\u017eiadavka klienta: <em>GET \/hello.txt<\/em><\/p>\n<p style=\"padding-left: 30px;\">Odpove\u010f: <em>Hello, world!<\/em><\/p>\n<p>HTTP bol vytvoren\u00fd na z\u00edskavanie dokumentov zo servera &#8211; to, na \u010do kedysi vznikol internet ako v\u00fdmenn\u00e1 sie\u0165 \u00fadajov medzi vysok\u00fdmi \u0161kolami. Od t\u00fdch \u010dias u\u017e pre\u0161la dlh\u00e1 cesta a niekde na tej ceste sa za\u010dali pou\u017e\u00edva\u0165 SOAP slu\u017eby. Zatia\u013e \u010do v p\u00f4vodnom protokole bolo jasn\u00e9, \u010do chcete robi\u0165 a s ak\u00fdmi \u00fadajmi u\u017e na \u00farovni HTTP (\u201eGET\u201c &#8211; \u010do chcem robi\u0165, \u201e\/hello.txt\u201c &#8211; s ak\u00fdmi \u00fadajmi), SOAP slu\u017eby priniesli RPC \u0161t\u00fdl, kedy sa st\u00e1le vykon\u00e1vaj\u00fa dotazy na jednu URL adresu pomocou POST pr\u00edkazu. To, \u010do sa vlastne m\u00e1 udia\u0165 medzi klientom a serverom je ukryt\u00e9 v tele dotazu v SOAP spr\u00e1ve. To je pr\u00e1ve ten rozdiel oproti klasick\u00fdm web str\u00e1nkam, ktor\u00e9 si \u010diasto\u010dne zachov\u00e1vaj\u00fa p\u00f4vodn\u00fd \u0161t\u00fdl &#8211; \u010do in\u00e9 \u00fadaje, to in\u00e1 URL (aj ke\u010f u\u017e aj v tejto oblasti nastal odklon napr\u00edklad v\u010faka Ajax-u).<\/p>\n<p>A v tomto momente sa dost\u00e1vame k tomu znovuzjednoteniu, o ktorom som p\u00edsal \u00faplne na za\u010diatku. \u010co ak by sme vedeli navrhn\u00fa\u0165 slu\u017eby tak, aby sa podobali str\u00e1nkam? Vr\u00e1ti\u0165 sa z odbo\u010dky, ktor\u00fa predstavuj\u00fa SOAP slu\u017eby a sk\u00fasi\u0165 zachova\u0165 z\u00e1kladn\u00e9 pravidl\u00e1 webu. Rie\u0161en\u00edm novej gener\u00e1cie by mali by\u0165 REST slu\u017eby..<\/p>\n<p>REST slu\u017eby s\u00fa hlavne o men\u0161om po\u010dte \u0161tandardov a ich v\u00e4\u010d\u0161om vyu\u017eit\u00ed. Tie \u0161tandardy s\u00fa vlastne tri: HTTP, URI a XML (alebo JSON, alebo XHTML at\u010f.). To je v\u0161etko, \u010do potrebujete pozna\u0165, ak chcete komunikova\u0165 s REST slu\u017ebami. Z\u00e1kladn\u00e1 my\u0161lienka je, \u017ee URI definuje \u00fadaje, s ktor\u00fdmi chcete pracova\u0165 a HTTP oper\u00e1ciu, teda \u010do s \u00fadajmi chcete spravi\u0165. Ak ste sa doteraz stret\u00e1vali s dvoma oper\u00e1ciami GET a POST, tak vedzte, \u017ee HTTP ich m\u00e1 e\u0161te viac. Napr\u00edklad PUT, DELETE, HEAD a OPTIONS. To u\u017e je celkom slu\u0161n\u00fd arzen\u00e1l na to, aby ste na tom vedeli postavi\u0165 nejak\u00fa infra\u0161trukt\u00faru. GET a POST z\u00edskali svoju sl\u00e1vu hlavne preto, lebo sa pou\u017e\u00edvaj\u00fa na \u0161tandardom webe (GET na z\u00edskanie \u00fadajov str\u00e1nky a POST na odoslanie v\u00fdsledkov formul\u00e1ra).<\/p>\n<p>A to je v podstate v\u0161etko &#8211; ide\u00e1lne by to malo by\u0165 takto jednoduch\u00e9. Napr\u00edklad<\/p>\n<p><em>PUT \/hodas\/issue<\/em><\/p>\n<p>m\u00f4\u017ee by\u0165 vlo\u017eenie nov\u00e9ho probl\u00e9mu do syst\u00e9mu evidencie ch\u00fdb pre projekt s n\u00e1zvom \u201ehodas\u201c (\u00fadaje tohto nov\u00e9ho probl\u00e9mu s\u00fa zap\u00edsan\u00e9 v tele HTTP dotazu pomocou niektor\u00e9ho popisn\u00e9ho form\u00e1tu, ktor\u00e9 som spom\u00ednal hore). Ako bude URI vyzera\u0165 a ako bude interpretovan\u00e1 u\u017e z\u00e1vis\u00ed \u010diste na tvorcovi syst\u00e9mu. Najv\u00e4\u010d\u0161\u00ed rozdiel medzi SOAP a REST je teda hlavne v tom, ako komunikujte so serverom &#8211; ak\u00e9 \u0161tandardy a ako ich pou\u017e\u00edvaj\u00fa. Naopak, met\u00f3da, ktor\u00e1 obsl\u00fa\u017ei t\u00fato po\u017eiadavku na serveri nap\u00edsan\u00e1 v nejako programovacom jazyku m\u00f4\u017ee by\u0165 ve\u013emi podobn\u00e1 v oboch pr\u00edpadoch. Samozrejme, \u017ee potrebujete nejak\u00fd REST framework, ktor\u00fd na z\u00e1klade URL zavol\u00e1 spr\u00e1vnu met\u00f3du (tie s\u00fa dnes ale pre ka\u017ed\u00fa popul\u00e1rnu platformu &#8211; kniha tie\u017e obsahuje zoznam a pr\u00edklad pou\u017eitia pre nieko\u013eko z nich).<\/p>\n<p>Zauj\u00edmavou vlastnos\u0165ou REST-u je, \u017ee v odpovedi, ktor\u00e1 pr\u00edde zo servera m\u00f4\u017eu by\u0165 zap\u00edsan\u00e9 odkazy na in\u00e9 \u00fadaje &#8211; teda URL. Takto si viem na z\u00e1klade prvej odpovede z\u00edskava\u0165 \u010fal\u0161ie \u00fadaje. To je nepochybne vlastnos\u0165, ktor\u00e1 sa v SOAP slu\u017eb\u00e1ch dosahuje len \u0165a\u017eko a je to tie\u017e krok sp\u00e4\u0165 ku klasick\u00e9mu webu, kde je previazanie hyperlinkami be\u017en\u00e1 z\u00e1le\u017eitos\u0165.<\/p>\n<p>REST slu\u017eby nie s\u00fa \u017eiadne ide\u00e1lne rie\u0161enie na v\u0161etky pr\u00edpady. Aj ke\u010f \u010derpaj\u00fa z jednoduchosti a toho, \u017ee sa viac podobaj\u00fa na klasick\u00e9 str\u00e1nky, existuj\u00fa oblasti, kde ich pou\u017eitie nie je tak\u00e9 jednoduch\u00e9 ako pri SOAP slu\u017eb\u00e1ch. S\u00fa to napr\u00edklad r\u00f4zne kroky procesov v komunik\u00e1cii medzi klientom a serverom. Pr\u00edkladom m\u00f4\u017ee by\u0165 realiz\u00e1cia jednej transakcie v r\u00e1mci viacer\u00fdch slu\u017eieb, asynchr\u00f3nne oper\u00e1cie alebo zlo\u017eit\u00e9 bezpe\u010dnostn\u00e9 a komunika\u010dn\u00e9 po\u017eiadavky, ktor\u00e9 dok\u00e1\u017eu obsl\u00fa\u017ei\u0165 WS-* \u0161tandardy. Napriek tomu sa zdaj\u00fa REST slu\u017eby o \u010dosi lep\u0161ie ako SOAP. U\u017e len preto, lebo s\u00fa jednoduch\u0161ie. A to je v softv\u00e9rovom svete, kde zlo\u017eitos\u0165 m\u00f4\u017ee by\u0165 jedn\u00fdm z najv\u00e4\u010d\u0161\u00edch probl\u00e9mov, ve\u013emi zauj\u00edmav\u00e1 vlastnos\u0165.<\/p>","protected":false},"excerpt":{"rendered":"<p>\u201eZnovuzjednotenie webu\u201c. Aj tak\u00fdto n\u00e1zov m\u00e1 jedna z kapitol knihy RESTFul web services od Leonarda Richardsona a Sama Rubyho. Kniha nie je len popisom toho, ako REST sie\u0165ov\u00e9 slu\u017eby vyzeraj\u00fa, ale hlavne silnou obhajobou, pre\u010do ich pou\u017e\u00edva\u0165. A tie\u017e toho, pre\u010do s\u00fa v prostred\u00ed internetu viac prirodzen\u00e9 ako ich star\u0161ie pr\u00edbuzn\u00e9 &#8211; SOAP slu\u017eby.<\/p>","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[13],"tags":[],"class_list":["post-23","post","type-post","status-publish","format-standard","hentry","category-vyvoj-softveru"],"_links":{"self":[{"href":"https:\/\/spireng.sk\/en\/wp-json\/wp\/v2\/posts\/23","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/spireng.sk\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/spireng.sk\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/spireng.sk\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/spireng.sk\/en\/wp-json\/wp\/v2\/comments?post=23"}],"version-history":[{"count":1,"href":"https:\/\/spireng.sk\/en\/wp-json\/wp\/v2\/posts\/23\/revisions"}],"predecessor-version":[{"id":231,"href":"https:\/\/spireng.sk\/en\/wp-json\/wp\/v2\/posts\/23\/revisions\/231"}],"wp:attachment":[{"href":"https:\/\/spireng.sk\/en\/wp-json\/wp\/v2\/media?parent=23"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/spireng.sk\/en\/wp-json\/wp\/v2\/categories?post=23"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/spireng.sk\/en\/wp-json\/wp\/v2\/tags?post=23"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}