REST csajoknak

Ryan Tomayko bejegyzésének többé-kevésbé sikerült tükörfordítása: akárhányszor olvasom, bénának érzem, de kész van, eddig babusgattam, gondoltam megosztom, hátha lesz akinek hasznára válik.

Hogy magyaráztam el a REST-et a nejemnek

Feleség: Ki az a Roy Fielding? Ryan:Egy fickó. Okos. Feleség: Oh? Mit csinált? Ryan: Segített megírni az első webservereket, majd rengeteget kutatott, hogy elmagyarázza, miért úgy működik a web, ahogy. Ott van a neve azon a protokoll specifikáción, amelyet a böngésződ a webservereken tárolt oldalak lekéréséhez használ. Feleség: Hogyan működik ez? Ryan: A web? Feleség: Ja. Ryan: Hmm. Igaziból bámulatos az dolog. A vicces az, hogy ugyanakkor az egész nagyon alulértékelt. A protokoll, amelyről beszélek, a HTTP (=HyperText Transfer Protocol), egy csomó klassz dologra képes, amit az emberek valamilyen okból figyelmen kívül hagynak. Feleség: Úgy érted, ez az a http, amit a böngésző címsorába a cím elejére írok? Ryan: Igen. A címnek ez az eleje mondja meg a böngészőnek, hogy milyen protokollt használjon. Amit odagépelsz az az egyik legfontosabb áttörés az információtechnológia történetében. Feleség: Miért? Ryan: Mert képes definiálni az információ helyzetét bárhol a világon. Ez a web alapja. Úgy tekints rá, mint az ismeretanyagok GPS koordinátája. Feleség: “GPS” a weboldalakhoz? Ryan: Valójában bármihez. Az a fickó, Roy Fieling, sokat beszél arról, hogy mik ezek a dolgok abban a specifikációban, amiről beszéltem. A web egy REST nevű acrhitekturális stílus alapján épül fel. A REST az erőforrás definícióját szolgáltatja, azokra mutat. Feleség: A weboldalak erőforrások? Ryan: Egyfajta erőforrás. Egy weboldal egy erőforrás megjelenítési formája. Az erőforrás csak koncepció. Az URL-ek (=Universal Resource Locator) – azok a címek, amiket a böngésződ címsorába gépelsz… Feleség: Tudom mi az az URL… Ryan: Oh, rendben. Szóval azok megmondják a böngészőnek, hogy hol van az adott információ-csomag (=erőforrás). A böngésző elkéri a csomagot (=erőforrást) a meghatározott formátumban. A böngészők tipikusan weboldal formában kérik el az információ-csomagokat. Feleség: Milyen más formátumok léteznek még? Ryan: Nos, pont a különböző formátumok azok, melyeket nem használnak túlzottan. Legtöbb esetben egy információ csomagnak csak egyféle formátuma létezik. De reméljük, hogy a jövőben a különböző formátumokat többet fogják használni, mivel időről időre újabb és újabb formátumok születnek. Feleség: Mint például? Ryan: Hmm. Nos, van egy koncepció, amit Web Service-nek hívnak. Sok embernek sok különböző dolgot jelent, de az alapkoncepció az, hogy a gépek éppúgy használják a webet, ahogyan az emberek. Feleség: Ez valami robotszerű dolog? Ryan: Nem, nem igazán. Nem úgy értem, hogy gépek leülnek majd az íróasztal elé és böngészik a webet. Úgy értem a számítógépek ugyanazokat a protokollokat tudják használni egymás közti üzenetváltásra. Már régóta csináljuk ezt, de a ma használt technikák közül egyik sem működik túl jól, mikor a világ összes gépével kellene tudnod kommunikálni. Feleség: Miért nem? Ryan: Mert nem ilyen használatra tervezték őket. Amikor Fielding és a cimborái elkezdték építeni a webet, a gépek egymás közti kommunikációjának megoldása volt az elsődleges feladat. Ma a legtöbb kommunikációs technika, amit a számítógépek egymás közti kommunikációjában használunk már nem felel meg ennek a követelménynek. A számítógépeknek csak más gépek egy kis csoportjával kellett kommunikálniuk. Feleség: És tudnod kell kommunikálni az összes géppel? Ryan: Igen – és még többel. Minden géppel, a rajtuk tárolt minden adattal kapcsolatban kell tudnunk kommunikálni. Szóval kell valami módszer arra, hogy egy gép elkérhessen egy másik géptől egy erőforrást (=adatot), ami akár épp egy harmadik gépen lehet. Feleség: Micsoda? Ryan: Mondjuk, hogy beszélsz a tesóddal és ő kölcsön akarja kérni a seprűd, vagy valami mást. De neked nincs seprűd – anyukádnak viszont van. Ezért elmondod a tesódnak, hogy kérje el anyukád seprűjét anyukádtól. Ilyen helyzetek folyamatosan adódnak a valós életben és akkor is, amikor gépek kezdenek el beszélgetni egymással. Feleség: És a gépek hogy mondják el egymásnak, hogy hol vannak a dolgok? Ryan: az URL (=Universal Resource Locator, Univerzális Erőforrás Lokátor) mondja meg nekik. Ha mindennek, amit a gépeknek egymással meg kell dumálniuk van egy meghatározott URL-je, akkor megalkottad a gépek nyelvén a főnevet. Te és én és a világ többi része is mind egyetért abban, hogy a főnevek nagyon fontosak ahhoz, hogy kommunikálni tudjunk, ugye? Feleség: Ja. Ryan: a gépeknek nincsenek univerzális főneveik – ez a “szívás” oka. Minden programnyelv, adatbázis vagy bármilyen egyéb rendszer más módon használja a saját főneveit. Ezért olyan fontos az URL. Lehetővé teszi, hogy a különböző rendszerek egymás főneveit használva beszélgetni tudjanak. Feleség: De amikor egy weboldalt nézek, nem gondolkodok ilyesmiken. Ryan: Senki sem agyal ezen. Kivéve Fieldinget és még egy maroknyi embert. Épp ezért “szívnak” a gépek. Feleség: És mi van az igékkel, a névmásokkal és a melléknevekkel? Ryan: Vicces, hogy ezt kérdezed, mert pont ez magyarázza a REST másik oldalát. Az igéket, egyébként. Feleség: Csak vicceltem. Ryan: Vicces volt, de valójában ez egyáltalán nem vicc. Az igék fontosak. Van egy polimorfizmus nevű nagyon fontos koncepció a számítógép tudományban és a programozási nyelvekben. Geek nyelven így mondjuk, ha a különböző főnevekkel ugyanazokat az igéket használhatjuk. Feleség: Nem értem. Ryan: Nos.. nézd meg a kávéasztalt. Mik a főnevek, amiket látsz? Csésze, tálca, újság, távirányító. Most mondd meg, mik azok a dolgok, amiket mindegyikükkel tudsz csinálni? Feleség: Nem értem… Ryan: Megkaphatod őket, ugye? Fel tudod őket emelni. Kopogni tudsz rajtuk. Elégetheted mindet. De használhatnánk akár ugyanazt az igét minden tárgyra, amiket itt látsz. Feleség: Oké… és? Ryan: Nos, ez az, ami fontos. Mi van akkor, ha ahelyett, hogy azt mondanám neked, hogy “fogd a csészét”, “fogd az újságot”, “fogd a távirányítót”; mi lenne, ha ehelyett minden főnévhez más igét kellene használnunk? Nem használhatnám a “fogd” igét univerzálisan, helyette minden főnév/ige kombinációban más-más igét kellene használnom. Feleség: Azta! Ez különös. Ryan: Igen, az. Valahogy az agyunk elég okos ahhoz, hogy tudja, néhány “univerzális” ige többféle főnévvel együtt használható. Néhány másik ige pedig jóval speciálisabb ettől és csak a főnevek egy meghatározott kis csoportjával alkalmazható. Például nem igazán vezethetek egy csészét és nem is ihatok egy autóból. Néhány ige azonban egészen univerzális, mint például a KAP, az AD és a TÖRÖL. Feleség: Nem TÖRÖLHETSZ egy csészét. Ryan: Nos, valóban, de kidobhatod. Ez egy másik vicc volt, ugye? Feleség: Igen. Ryan: Szóval HTTP – a protokoll, amit Fielding és a barátai létrehoztak – pont arról szól, hogy hogyan alkalmazzuk az igéket a főnevekkel. Például, ha felkeresel egy weboldalt, a böngésződ az oldal tartalmát egy HTTP GET kéréssel kéri el attól a géptől, amit az általad begépelt URL határoz meg és az eredményt egy weboldal formájában jeleníti meg neked. A weboldalkon általában képek is vannak, igaz? Ezek másfajta adatok (=erőforrások). A weboldal csak a képek URL-jét határozza meg, a böngésző feladata az, hogy ezek alapján az URL-ek alapján újabb HTTP GET kérésekkel elkérje a weboldal képeit egész addig, míg minden egyes adatot (=erőforrást) meg nem kap, majd végül megjeleníti a weboldalt neked. És ez a fontos: a böngésző nagyon különbőző főnevek beszerzéséhez használja ugyanazt az igét. Mindegy, hogy a főnév egy kép, szöveg, video, mp3, slideshow, bármi más. Mindet a GET ige segítségével kéri el onnan, ahova az adat URL-je mutat. Feleség: Úgy tűnik a GET egy nagyon fontos ige. Ryan: Az. Különösen amikor böngészőt használsz, mivel a böngészők javarészt csak GET-tel kérnek. Nem képesek túl sok másfajta interakciókra a különböző erőforrásokkal. Ez a valódi probléma, mert ez vezetett ahhoz, hogy sok ember azt gondolja, a HTTP csak a GET kéréseken alapul. Ezzel ellentétben a HTTP egy általános célú protokoll különböző igék és főnevek alkalmazására. Feleség: Klassz. De még mindig nem látom, hogy változtatna ez meg bármit is. Milyen másfajta főneveket és igéket akarsz még? Ryan: Nos, a főnevek már megvannak, csak épp még nem a megfelelő formátumban. Gondolj arra, mikor az amazon.com-ot böngészed, karácsonyi ajándék után kutatva nekem. Képzeld azt, hogy minden egyes termék főnév. Ha mindezek a gépek számára is érthetőek lennének, egy csomó klassz dolgot tudnánk csinálni. Feleség: Miért nem értenek meg a gépek egy átlagos weboldalt? Ryan: Mert a weboldalakat úgy tervezték, hogy azt emberek értsék. Egy gép nem törődik az adatok külalakjával. A gépeknek alapvetően csak az adatra van szükségük. Ideális esetben, minden URL-nek léteznie kellene egy emberek számára olvasható és egy gépek számára értelmezhető formában. Amikor a gépek GET-tel elkérik az adatot egy ember részére, az ember számára érthető változatot kérik el. Feleség: Szóval az emberek meg kellene csinálniuk az oldalaikat a gépek számára érthető formában is? Ryan: Ha az értékes. Nézd, elég sok absztakcióval beszélgetünk erről. Mi lenne, ha valós emberekkel néznénk meg mindezt. Tanár vagy – fogadok, hogy a sulitokban van egy nagy számítógép rendszer, vagy legalábbis 3-4 számítógép, amelyeken adminisztráljátok a diákokat: ki melyik osztályba jár, milyen jegyeik vannak, információk a könyvekről, amikből tanítotok, stb. Ha a rendszeretek web alapú, akkor valószínűleg minden főnévnek, amit az előbb használtam van saját URL-je: diák, tanár, osztály, könyv, terem, stb. Az URL-t a böngészőbe írva visszakapsz egy weboldalt. Ha az URL-nek van gépek által olvasható megfelelője, akkor egy új információ integrálása a rendszerbe elég triviális, mert minden adat standard módon fogyasztható. Ráadásul így valószínűleg könnyebb a különböző rendszerek egymás közti kommunikációja is. Emiatt könnyen építhettek akár egy országos méretű rendszert, amely elemei egymással kommunikálva összegyűjtheti az egyes iskolákban megíratott tesztek pontszámait. A lehetőségek határtalanok. Minden egyes rendszerelem egy egyszerű HTTP GET kéréssel szerzi meg a másiktól az információt. Ha az egyik rendszernek információt kell adnia a másik számára, HTTP POST-ot fog használni. Ha az egyik rendszer információt akar frissíteni egy másik rendszerben, HTTP PUT segítségével oldja meg. Az egyetlen dolog, ami hátra van az az, hogy kitaláljátok, hogy kell az adatnak kinéznie. Feleség: Szóval ez az, amin te és a többi számítógépes ember dolgozik most? Meghatározni, hogy hogy nézzen ki az adat? Ryan: Sajnos, nem. A többség ehelyett azzal van elfoglalva, hogy komplex specifikációkat írjon arról, hogy oldjuk meg mindezt más módon. A főneveik nem univerzálisak, az igéik nem polimorfok. Kidobunk évtizedes megbízhatóan használt és bizonyított technikákat és újrakezdjük olyanokkal, melyek úgy néznek ki, mint korábbi technikák, melyek a múltban már megbuktak. HTTP-t használunk de csak azért mert az segít nekünk, hogy a hálózati és biztonságtechnikai emberek kevesebbet beszéljenek róla. Az egyszerűséget áldozzuk fel a csini eszközök és varázslók oltárán. Feleség: Miért? Ryan: Fogalmam nincs. Feleség: Miért nem mondasz valamit? Ryan: Talán fogok.
Ha a fenti olvasmány nem tetszett és a REST-ről inkább komolyabban olvasnál, akkor itt a Wikipedia link.]]>

4 thoughts on “REST csajoknak

  1. Gábor

    Hát, nem tudom, a RESTful koncepció szempontjából szerintem a szálítási protokoll milyensége (hogy HTTP-e, vagy sem) irreleváns. Ehhez képest a dialógus a HTTP nagyszerűsége körül forog és pont a REST koncepció lényegét nem említi. Hiányzik belőle lényeg: az összekötettés- és állapotmentes működés, illetve az ebből adódó sok minden előny: pl. a könnyű skálázhatóság; az új+régi szolgáltatások, illetve régi szolgáltatások verziófrissített változatának egyidejű létezhetősége a rendszerben, stb. (A hátrányokról is szemérmesen hallgat (pl. a hatékony session kezelésnek a szerveroldali állapotmentességből fakadó problémái))
    Hogy a polimorfizmus érvéként való felhozatala mennyire teszi “csajoknak érthetővé”, azt nem tudom, a KISS szabály felhozatal akkor már nyerőbb lenne, IMHO.
    Az URI és az URL (és az URN) fogalma is webhez kötődik, de nem a REST koncepcióhoz, a REST csak felhasználja azt a címzéshez.
    Az oldalak “gépi érthetőségét” összemosni a REST koncepcióval pedig szintén hibás, a kettőnek köze nincs egymáshoz, tök független problémák. A “kinézet” vs. “jelentés” probémaköre elvezetne a jelölő (markup) nyelvek területére: mi az, hogy szemantikus web, mi a különbség a HTML és az XML között, hogy lehet a kettőt ötvözni az XHTML-ben, stb., de ennek semmi összefüggése egy szolgáltatás RESTful, vagy nem RESTful voltával…

    Reply
    1. eFi Post author

      Gábor, most olvastasd el egy tetszőleges csajjal, amit írtál 🙂
      “Tekintve, hogy az A.E. egy olyan VIP, nem kellene T.Ü.K.-kösítenünk R.N. sk-ját mielőtt a vietkongok KO-zzák és mi EÜ szolgálatra kerülünk?” – mondta hasonlóképp Robin Williams nevében Bajor Imre a Jó reggelt, Vietnam-ban 🙂

      Reply
  2. Gábor

    eFi, az én hozzászolásom nem az informatikai analfabétáknak szólt. 🙂
    (Vegyük észre a cikkíró jókora szeximusát: “csaj”==”informatikai analfabéta”. Van pár nőnemű szoftveres ismerősöm, szerintem nem díjaznák a cikkíró hozzáállását)
    Értelemszerűen mivel a komment szakmai és nem a cikkíró nejének szól, tehát szakkifejezéseket használ. Egyedül a KISS szabály és az IMHO nem szakkifejezés, ez talán még belefér. 😀
    A komment arról szól, hogy cikkíró szakmai csúsztatásán füstölgök: a REST nem egyenlő a HTTP-vel. A cikkíró REST magyarázata az informatikai analfabéte nejének (akit azért megkínál olyasmivel, mint “polimorfizmus”, hehe) kb. olyan, mintha úgy magyarázná az internetezést, hogy az az azért menő, mert a Facebook milyen szuperül meg van csinálva…

    Reply

Leave a Reply to Gábor Cancel reply

Your email address will not be published. Required fields are marked *