Komentáře k článku

REST: architektura pro webové API

Čtete v dokumentaci u různých webových aplikačních rozhraní často zkratku REST nebo RESTful? Zajímá vás, jak tato architektura vypadá, co vlastně popisuje a jak se s ní pracuje? V dnešním článku se seznámíme s jejími hlavními rysy a ukážeme si některé základní operace na jednoduchých příkladech práce s Twitterem.

Zpět na článek

32 komentářů k článku REST: architektura pro webové API:

    1. Martin MalýAutor příspěvku

      Re: REST nie je protokol!

      Ano, děkuji za upozornění, REST je architektura, nikoli protokol. Opravil jsem na dvou místech spojení slov „REST“ a „protokol“, kde nemělo význam „protokol (typu) REST“, tedy „protokol založený na architektuře REST“.

        1. KLoK

          Re: REST nie je protokol!

          Ano krokodyl je sice plaz, ale hlavne patri mezi obratlovce, ci jeste lepe mezi strunatce…

        2. pr.rybar

          Re: REST nie je protokol!

          Dakujem za pripomienku, v tom prvom prispevku som to uviedol, ale uz som nechcel tak bazirovat na terminologii aby sa autor neurazil. :)

  1. peter

    zabudol som pochvalit

    Celkom pekny clanok. Dufam ze o RESTe a RESTovskych webovych sluzbach sa bude na roote viac pisat.

    1. Martin MalýAutor příspěvku

      Re: zabudol som pochvalit

      Díky i za pochvalu. Na Zdrojáku se o podobných věcech psát určitě bude.

  2. Vrtak-CZ

    Mohlo být doplněno

    Škoda že není doplněno pár odkazů na knihovny které s RESTem umí pracovat. Např pro PHP, Python, Javu atd.

    1. Martin MalýAutor příspěvku

      Re: Mohlo být doplněno

      S RESTful rozhraním dokáže pracovat každá knihovna, která umí poslat HTTP požadavek. Třeba i prostý JavaScript. Takže se nedá říct, že existují speciální „knihovny pro práci s RESTem“. Jsou konkrétní knihovny pro konkrétní API určité služby. Jak tu už bylo řečeno: REST není konkrétní protokol (protokol je třeba „obyčejné“ HTTP).

      1. karmi

        Re: Mohlo být doplněno

        Pozor, ano i ne. S RESTful rozhraními lze pracovat třebas jen curlem, jak hezky ukazuje článek. A právě ta „transparence“ RESTful rozhraní je jednou z killer features. Ale právě „wrappery“ pro různé platformy jsou to, co práci s RESTem dělá příjemnou a zajímavější. Typicky např. pro Ruby:

         

        HTTParty [http://railstip­s.org/2008/7/29/­it-s-an-httparty-and-everyone-is-invited]

        class Representative
          include HTTParty
        end
        puts Representative.get('http://whoismyrepresentative.com/whoismyrep.php?zip=46544').inspect
        # "<result n='1' ><rep name='Joe Donnelly' ... /></result>"

         

        RestClient [http://rest-client.heroku­.com/rdoc/]

        RestClient.post 'http://example.com/resource', :param1 => 'one', :nested => { :param2 => 'two' }

         

        A v neposlední řadě nekompromisní „objektově relační“ abstrakce nad REST rozhraním v podobě ActiveResource v Ruby on Rails [http://api.ru­byonrails.org/clas­ses/ActiveResou­rce/Base.html]

        class Person < ActiveResource::Base
          self.site = "http://api.people.com:3000/"
        end
        ryan = Person.new(:first => 'Ryan', :last => 'Daigle')
        ryan.save                # => true
        ryan.id                  # => 2
        ...
  3. Petr

    ATOM publishing protocol

    Zdá se mi to, nebo Atom je RESTful? Mám na mysli Atom jako protokol, v článku byl zmíněn „jen“ jako syndikační datový formát.

    Mimochodem, používá vůbec někdo Atom pro něco víc než možná tak jako alternativu RSS, jako že by třeba svůj blog psal v nějaké desktopové aplikaci a přes Atom postoval na web?

    1. Martin MalýAutor příspěvku

      Re: ATOM publishing protocol

      Nezdá… nakolik jsem ATOM studoval, tak jeho možnosti publikování jsou postavené právě na REST architektuře. (ATOM nebyl zmíněn jako „syndikační formát“, ale jako jeden z „formátů dat“, který nabízí Twitter. Já osobně ATOM nepovažuju za syndikační formát a snažím se jej všude uvádět jako „publikační datový formát“.)

    2. Jan Tichý

      Re: ATOM publishing protocol

      Ano, Atom je právě moc hezká ukázka důsledného využití REST architektury, ostatně s tímto cílem byl i primárně vytvářen. To, že se postupem času ve většině využití redukoval jenom na syndikační formát, neboli druhé RSS, je věc druhá.

  4. ludfan

    Twitter API porusuje zasady REST

    Podla RESTovskych zasad by URL nemalo obsahovat sloveso.

    To znamena, ze spravne by sa mazat malo takto:

    curl -u user:password --http-request DELETE http://twitter.com/statuses/1472669360.xml

    Detto pre POST a PUT.

    Autori API to nepochybne vedeli. Jedna sa asi o „ustupok vseobecnemu vkusu“.

    Privital by som clanok, ktory by ukazal ako sa ten isty problem vyriesi pomocou tradicneho „RPC“ pristupu a pomocou REST pristupu.

    1. Martin MalýAutor příspěvku

      Re: Twitter API porusuje zasady REST

      Řekl bych, že šlo o důvod, který zmiňuju v článku, tedy o „workaround“ pro ty klienty, kteří neumějí jiné HTTP metody než GET a POST.

      1. t42

        Re: Twitter API porusuje zasady REST

        take bych rekl

        jen pro doplneni – dalsi takovou obechcavkou je dynamicke vygenerovani maleho formulare odesilajiciho data metodou POST pomoci javascriptu, viz Rails (bylo to tam driv, nevim jestli to nezmenili). Informace o tom, ze se ve skutecnosti jedna o PUT je prenasena v hidden field

        ten formular vypada nejak takto:

          
          ...
  5. smilelover

    Upresneni...

    – jmeno autora je Roy Fielding, nikoliv Field

    – doporucuju jeden z nejlepsich clanku vysvetlujicich samou podstatu RESTu: http://tomayko­.com/writings/rest-to-my-wife

    – Stalo by za to vice rozvest vztah „stavu“ a „stavovosti“ k RESTu. Tedy ze jde o prenos reprezentaci stavu jednotlivych resources, ktery ale sam o sobe musi byt bezstavovy, tedy ze odpoved na kazdy request musi obsahovat veskera data potrebna pro jeji interpretaci a nesmi zaviset na datech ze zadneho prechazejiciho nebo nasledujiciho requestu.

    – Mozna vic duraz na presnost terminologie… REST sam o sobe napr. neimplementuje zadne metody (POST, GET…). REST je neco jako interface treba v Jave, jeho aplikace v HTTP prostredi je neco jako implementace toho interface… viz ten Tomaykuv clanek, ktery abstrahuje REST od HTTP. REST na HTTP nutne nezavisi, ze je v 99.9 % dnes implementovan pres HTTP je vec jina. Take formulace „Pomocí HTTP GET požadavku získáme data konkrétního zdroje“ neni presna, ziskavame reprezentaci stavu zdroje… jasny, jsou to data, ale kdyz uz, drzel bych se terminologie…

    1. Martin MalýAutor příspěvku

      Re: Upresneni...

      Děkuji za upřesnění. Fielding je opraven, díky.

      Snažil jsem se o popis spíš z praktického hlediska než z hlediska terminologické přesnosti, protože nejde o odborné pojednání, ale o to, aby si čtenáři udělali zhruba obrázek „oč jde, když se řekne…“

      Ano, je to „reprezentace stavu zdroje“, ale 80% webových vývojářů si pod tímhle termínem těžko něco představí a budou se tu hromadit komentáře „to je zase nějaký abstraktní blábol, nepoužitelné v praxi, blablabla…“ Takže ano, HTTP GET vrátí reprezentaci stavu zdroje, ale říct, že jsou to data, je na tomto místě přípustné zjednodušení. Totéž abstrakce REST a HTTP – je samosebou lepší, ale jsme na Zdrojáku, kde 99% čtenářů tvoří lidé, pro něž je HTTP denním chlebem, takže jsem si opět dovolil zjednodušení.

      Každopádně děkuji za doplnění a upřesnění terminologie.

  6. Karel

    Chyba odkazu

    Tak jsem si zkusil kliknout na příklad GET z twitteru ve formátu XML. A výsledkem byl krásný XML dokument. O pár řádků níže je příklad téhož, ve formátu rss (http://twitter­.com/statuses/u­ser_timeline/lu­pacz.rss). Kliknu a .. mám opět krásné XML. Vypadá to, že text hyperlinku správně obsahuje koncovku .rss, ale samotný hyperlink odkazuje stále na .xml.

  7. benzin

    bezstavovost

    Vim ze hlavni deviza RESTu je jeho bezstavovost. Znamena to tedy, ze uzivatel se neustale znovu autentifikuje?

    Muzu v RESTu ziskat od serveru nejaky hodnotu, kterou nasledne pouziju k volani? A co takto ziskat identifikator session?

    1. Martin MalýAutor příspěvku

      Re: bezstavovost

      Ano, je potřeba se pokaždé znovu autentifikovat. Zkuste na celou věc nazírat jako na atomické operace nad daty: Klient požádá o operaci s daty, dodá potřebné informace, a operace proběhne (i když výsledkem může být chybové sdělení). Tato akce není závislá na žádné předchozí akci a neovlivňuje žádnou následující akci. To je základní princip architektury REST.

      Ostatně trend vývoje webových aplikací směřuje k tomu uchovávat autentifikační informace i „session“ na straně klienta.

      1. Petr

        Re: bezstavovost

        Pánové, prosím, jsme na odborném webu: identifikace – autentizace (ještě snesu autentikace) – autorizace – (accounting).

        Nikdy, ale nikdy „autentifikace“. :-/

        1. Martin MalýAutor příspěvku

          Re: bezstavovost

          Klasická sentence praví: „Nikdy neříkej nikdy“ – jedná se o synonyma, jsou to tři různě utvořené české tvary bez významového rozdílu, a můžeme se dohadovat o zvyklostech, ale nikoli o tom, které z nich je „správné“. Na toto téma viz článek Dalibora Behúna.

          Ale jinak máte pravdu, zvyklost na Zdrojáku velí „autentizace“, ovšem za mne to řeší korektorka, takže jsem v tomto případě použil stejné slovo, jaké použil tazatel. :)

  8. uf

    diky za info

    Diky za clanek. Zrovna minuly tyden jsem si rekl: Sakra, podivam se poradne, co to je. Jedine, co jsem vedel bylo, ze je to zpusob bezstavovych pozadavku na zdroje predavanych jako atomicke operace. Kupodivu to staci ! :-)

    mezi nami – prikazy v davce take mohou REST – copy, zip, … Proste reknete tady pridej a ono se to udela, pak pod to pridam dalsi informace a ocekavam, ze to bude nebo se mi oznami chyba. to je REST.

    dotaz? Komplexni zmena (tj. tam, kde bych delal transakci) musi obsahovat vsechny informace a byt postavena jako jedna operace?

Napsat komentář

Tato diskuse je již příliš stará, pravděpodobně již vám nikdo neodpoví. Pokud se chcete na něco zeptat, použijte diskusní server Devel.cz

Zdroj: https://www.zdrojak.cz/?p=3059