abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    dnes 04:55 | Zajímavý software

    Microsoft zveřejnil na GitHubu zdrojové kódy MS-DOSu 4.0 pod licencí MIT. Ve stejném repozitáři se nacházejí i před lety zveřejněné zdrojové k kódy MS-DOSu 1.25 a 2.0.

    Ladislav Hagara | Komentářů: 17
    včera 17:33 | Nová verze

    Canonical vydal (email, blog, YouTube) Ubuntu 24.04 LTS Noble Numbat. Přehled novinek v poznámkách k vydání a také příspěvcích na blogu: novinky v desktopu a novinky v bezpečnosti. Vydány byly také oficiální deriváty Edubuntu, Kubuntu, Lubuntu, Ubuntu Budgie, Ubuntu Cinnamon, Ubuntu Kylin, Ubuntu MATE, Ubuntu Studio, Ubuntu Unity a Xubuntu. Jedná se o 10. LTS verzi.

    Ladislav Hagara | Komentářů: 13
    včera 14:22 | Komunita

    Na YouTube je k dispozici videozáznam z včerejšího Czech Open Source Policy Forum 2024.

    Ladislav Hagara | Komentářů: 2
    včera 13:22 | Nová verze

    Fossil (Wikipedie) byl vydán ve verzi 2.24. Jedná se o distribuovaný systém správy verzí propojený se správou chyb, wiki stránek a blogů s integrovaným webovým rozhraním. Vše běží z jednoho jediného spustitelného souboru a uloženo je v SQLite databázi.

    Ladislav Hagara | Komentářů: 0
    včera 12:44 | Nová verze

    Byla vydána nová stabilní verze 6.7 webového prohlížeče Vivaldi (Wikipedie). Postavena je na Chromiu 124. Přehled novinek i s náhledy v příspěvku na blogu. Vypíchnout lze Spořič paměti (Memory Saver) automaticky hibernující karty, které nebyly nějakou dobu používány nebo vylepšené Odběry (Feed Reader).

    Ladislav Hagara | Komentářů: 0
    včera 04:55 | Nová verze

    OpenJS Foundation, oficiální projekt konsorcia Linux Foundation, oznámila vydání verze 22 otevřeného multiplatformního prostředí pro vývoj a běh síťových aplikací napsaných v JavaScriptu Node.js (Wikipedie). V říjnu se verze 22 stane novou aktivní LTS verzí. Podpora je plánována do dubna 2027.

    Ladislav Hagara | Komentářů: 0
    včera 04:22 | Nová verze

    Byla vydána verze 8.2 open source virtualizační platformy Proxmox VE (Proxmox Virtual Environment, Wikipedie) založené na Debianu. Přehled novinek v poznámkách k vydání a v informačním videu. Zdůrazněn je průvodce migrací hostů z VMware ESXi do Proxmoxu.

    Ladislav Hagara | Komentářů: 0
    včera 04:11 | Nová verze

    R (Wikipedie), programovací jazyk a prostředí určené pro statistickou analýzu dat a jejich grafické zobrazení, bylo vydáno ve verzi 4.4.0. Její kódové jméno je Puppy Cup.

    Ladislav Hagara | Komentářů: 0
    24.4. 22:44 | IT novinky

    IBM kupuje společnost HashiCorp (Terraform, Packer, Vault, Boundary, Consul, Nomad, Waypoint, Vagrant, …) za 6,4 miliardy dolarů, tj. 35 dolarů za akcii.

    Ladislav Hagara | Komentářů: 14
    24.4. 15:55 | Nová verze

    Byl vydán TrueNAS SCALE 24.04 “Dragonfish”. Přehled novinek této open source storage platformy postavené na Debianu v poznámkách k vydání.

    Ladislav Hagara | Komentářů: 0
    KDE Plasma 6
     (73%)
     (9%)
     (2%)
     (16%)
    Celkem 785 hlasů
     Komentářů: 4, poslední 6.4. 15:51
    Rozcestník

    Co to je REST?

    3.10.2013 19:02 | Přečteno: 6294× | oooo | poslední úprava: 3.10.2013 19:01

    Ani po přečtení několika článků pořád úplně nerozumím tomu, co to je REST. Ví se to vůbec? Moje pracovní teorie je, že to je buzzword, pod kterým si každý představuje něco trochu jiného.

    Díval jsem se i paper ve kterém byl REST představen, ale nepodařilo se mi ten text rozparsovat. Je to psané podobně abstraktním a nicneříkajícím stylem jako článek na Wikipedii:
    Representational State Transfer is an architectural style that abstracts the architectural elements within a distributed hypermedia system. REST ignores the details of component implementation and protocol syntax in order to focus on the roles of components, the constraints upon their interaction with other components, and their interpretation of significant data elements.
    WTF? Pokud se někdo chce dozvědět co to je REST, jak mu tohle pomůže?

    Jak chápu REST API

    Velmi zjednodušený popis toho, co si představuji pod REST API. Dá se říct, že to je podmnožina oběcně přijímané definice RESTu.

    REST API je množina kolekcí. Například můžeme mít API se dvěmi kolekcemi: /articles a /comments. Ke konkrétnímu prvku kolekce můžeme přistupovat prostřednictvím URL /[kolekce]/[id]. Na kolekcích i na jejich prvcích mohou být definovány metody GET, POST, PUT, DELETE. Lze to také chápat jako jednoduché rozhraní nad databází (kolekce = tabulka). Kolekce lze filtrovat, příklad: GET /articles/?author=123.

    Jakým stylem navrhovat webové API?

    REST API, tak jak je popsané v předchozím odstavci je oproti RPC API jednodušší na údržbu a implementaci. Ale pro použití v reálném světě není dostatečně flexibilní. Za nejlepší přístup považuji kompromis – kombinace REST a RPC. Obecně řečeno, takové API se skládá ze tří částí:        

    Hodnocení: 62 %

            špatnédobré        

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    Komentáře

    Vložit další komentář

    3.10.2013 19:30 Miriam | skóre: 3 | blog: zivot
    Rozbalit Rozbalit vše Re: Co to je REST?
    REST tak jak ho implementoval Google mi nesmí na oči, je to prasárna, prasárna a nic než prasárna.
    3.10.2013 19:39 backinabag | blog: backinabag
    Rozbalit Rozbalit vše Re: Co to je REST?
    O co konkrétně jde?
    xkucf03 avatar 4.10.2013 19:22 xkucf03 | skóre: 49 | blog: xkucf03
    Rozbalit Rozbalit vše Re: Co to je REST?

    +1, viděl jsem, jak se snaží zpřístupnit čistě procedurální (z principu) věci pomocí RESTu (protože ten teď přece frčí a všichni ho musí mít), prasárna, zvrácenost.

    Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
    Josef Kufner avatar 3.10.2013 20:01 Josef Kufner | skóre: 70
    Rozbalit Rozbalit vše Re: Co to je REST?
    Pointa RESTu je v tom, že máš globální identifikátory (URI), předdefinované API a bezstavový protokol, kterým přenášíš informaci o stavu v aplikaci.

    Když se to správně implementuje a to předdefinované API stačí, má to pár pěkných vlastností. Například kešovatelnost odpovědí serveru na několika úrovních (např. na HTTP proxy, klientovi i serveru), vysokou škálovatelnost (bezstavový protokol) a pak také hyerlinky, které jsou přirozenou součástí toho všeho (odkazování napříč několika aplikacema). Díky HTTP metodě OPTIONS pak může klient zjistit, co lze s entitou na dané URI dělat, takže tu je i nějaká taková možnost reflexe.

    Ta disertace, ve které to bylo představeno, to opravdu popisuje dost abstraktně a za těch cca 10 let se i význam REST trochu posunul. Jsou tam ale popsány ty základní myšlenky, které se vytratily z většiny moderních blábolů, ehm, textů o RESTu.
    Hello world ! Segmentation fault (core dumped)
    Bedňa avatar 4.10.2013 01:50 Bedňa | skóre: 34 | blog: Žumpa | Horňany
    Rozbalit Rozbalit vše Re: Co to je REST?
    bezstavový protokol, kterým přenášíš informaci o stavu v aplikaci
    To hovorí za všetko :-)
    KERNEL ULTRAS video channel >>>
    Josef Kufner avatar 4.10.2013 02:14 Josef Kufner | skóre: 70
    Rozbalit Rozbalit vše Re: Co to je REST?
    Co se ti na tom nelíbí?
    Hello world ! Segmentation fault (core dumped)
    Bedňa avatar 4.10.2013 13:02 Bedňa | skóre: 34 | blog: Žumpa | Horňany
    Rozbalit Rozbalit vše Re: Co to je REST?
    Len mi tá veta prišla zaujímavá.
    KERNEL ULTRAS video channel >>>
    4.10.2013 12:56 backinabag | blog: backinabag
    Rozbalit Rozbalit vše Re: Co to je REST?
    Co přesně je bezstavový protokol? Není databáze na serveru stav?

    Takže se dá říct, že REST API zveřejňuje několik podmnožin stavu serveru (resp. pohledů na stav serveru), kde každá podmnožina je reprezentována nějakou URL?
    4.10.2013 13:16 Michal Karas | skóre: 45 | blog: /dev/random
    Rozbalit Rozbalit vše Re: Co to je REST?
    Josef Kufner avatar 4.10.2013 15:12 Josef Kufner | skóre: 70
    Rozbalit Rozbalit vše Re: Co to je REST?
    Rozlišuj stav na serveru a přenos informace o tomto stavu.
    Hello world ! Segmentation fault (core dumped)
    4.10.2013 07:39 JS1 | skóre: 2 | blog: intuition_pump
    Rozbalit Rozbalit vše Re: Co to je REST?
    To co me na zacatku matlo bylo to, ze to, co se puvodne oznacovalo (respektive u ceho ten termin vznikl) jako REST, to znamena WSDL a SOAP, se dnes uz za REST neoznacuje. Dnes je REST v podstate navrat k cistemu HTTP protokolu, protoze WSDL je prekomplikovane.
    Lidstvo čelí v tomto století hrozbě civilizačního kolapsu. Podpořte hnutí klimatickakoalice.cz!
    4.10.2013 09:24 podlesh | skóre: 38 | Freiburg im Breisgau
    Rozbalit Rozbalit vše Re: Co to je REST?
    Cože, někdo někdy někde označoval SOAP nebo dokonce WSDL za REST? To jsem neviděl a nedovedu si to ani představit...

    Jo, něco jiného by byl termín "web services" - tam se skutečně význam začíná posouvat.
    4.10.2013 11:05 JS1 | skóre: 2 | blog: intuition_pump
    Rozbalit Rozbalit vše Re: Co to je REST?
    I SOAP se tusim da delat bezstavove, tudiz muzou platit pravidla RESTu. Proste REST je puvodne filozofie navrhu, nezavisla na protokolu, ale dneska se pod tim spis chape specificky navrh vyuzivajici urcitym (jednoduchym) zpusobem HTTP protokol.
    Lidstvo čelí v tomto století hrozbě civilizačního kolapsu. Podpořte hnutí klimatickakoalice.cz!
    Saljack avatar 4.10.2013 11:29 Saljack | skóre: 28 | blog: Saljack | Praha
    Rozbalit Rozbalit vše Re: Co to je REST?
    Jenže SOAP je RPC kdežto REST je orientován na data, pokud v tomto nespatřuješ rozdíl, tak je něco špatně.
    Sex, Drugs & Rock´n Roll.
    4.10.2013 11:33 JS1 | skóre: 2 | blog: intuition_pump
    Rozbalit Rozbalit vše Re: Co to je REST?
    SOAP/WSDL webservices jsem prilis nestudoval, jenom rikam, ze me to matlo. Evidentne se to ale, z toho co jsem o tom na zacatku cetl, tim RESTovym zpusobem (Representational State Transfer) pouzivat da.
    Lidstvo čelí v tomto století hrozbě civilizačního kolapsu. Podpořte hnutí klimatickakoalice.cz!
    Josef Kufner avatar 4.10.2013 15:17 Josef Kufner | skóre: 70
    Rozbalit Rozbalit vše Re: Co to je REST?
    Slovíčka GET, POST, PUT a další jsou označovány jako HTTP metody. To není omylem a je to úplně to samé jako RPC, jen to vypadá na první pohled trochu jinak. Narozdíl od SOAP máš u HTTP tyto metody předem dané ve specifikaci protokolu. Takže když v SOAP nadefinuješ ty samé metody, jako ty ve specifikaci HTTP, dostaneš prakticky totéž, jen s jinou syntaxí.
    Hello world ! Segmentation fault (core dumped)
    xkucf03 avatar 4.10.2013 19:40 xkucf03 | skóre: 49 | blog: xkucf03
    Rozbalit Rozbalit vše Re: Co to je REST?

    Rozdíl je v tom, že ve WSDL můžeš krásně specifikovat o obsah/strukturu zpráv (požadavků a odpovědí), čehož se RESTaři až křečovitě brání (WADL, WSDL pro REST?) a strojově čitelný tam máš tak leda MIME typ (ale jaká má být struktura, co posíláš, nebo jakou dostaneš, to si musíš přečíst někde jinde nebo nějak vypozorovat).

    Malé shrnutí:

    Primární orientace:
    REST: zdroje, kolekce dat
    SOAP: procedury

    Základní metody:
    REST: standardizované, omezená sada (CRUD, vazba na HTTP operace)
    SOAP: specifikují se až operace ve WSDL, obecně standardizované nejsou (CRUD operace si můžu pojmenovat, jak chci), neomezená sada – definuji si libovolné operace

    Obsah zpráv:
    REST: není definovaný, maximálně jen MIME typ, nebo se strojově čitelná definice nepoužívá
    SOAP: obsah zpráv resp. parametry procedur a struktura odpovědí může být velmi přesně a strojově čitelně specifikované → dá se vygenerovat dobré rozhraní v mnoha různých jazycích a snadno ho volat a zpracovávat odpovědi, typová kontrola

    Podkladový protokol:
    REST: velmi těsná vazba na HTTP
    SOAP: zprávy lze přenášet libovolným kanálem

    Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
    4.10.2013 20:00 backinabag | blog: backinabag
    Rozbalit Rozbalit vše Re: Co to je REST?
    Z mých zkušeností je mnohem příjemnější pracovat s RESTem než se SOAPem. SOAP je strašně robustní a flexibilní, REST krásně jednoduchý. Na papíře na tom sice vychází SOAP líp, ale v praxi mi přijde REST-like API s online dokumentací mnohem lepší.
    xkucf03 avatar 4.10.2013 22:01 xkucf03 | skóre: 49 | blog: xkucf03
    Rozbalit Rozbalit vše Re: Co to je REST?

    Neříkám, že SOAP je obecně lepší – ono když potřebuješ čistý CRUD a máš někde jinde specifikovaný formát obsahu nebo na něm nezáleží, tak je REST fajn.

    Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
    xkucf03 avatar 4.10.2013 22:05 xkucf03 | skóre: 49 | blog: xkucf03
    Rozbalit Rozbalit vše Re: Co to je REST?

    P.S. ono to hlavně nejde srovnávat a nemělo by se to brát jako konkurenční technologie – měl by ses rozhodnout podle toho, jestli jsou pro tebe primární procedury nebo zdroje.

    Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
    xvasek avatar 4.10.2013 22:12 xvasek | skóre: 21 | blog: | Zlín
    Rozbalit Rozbalit vše Re: Co to je REST?
    SOAP: obsah zpráv resp. parametry procedur a struktura odpovědí může být velmi přesně a strojově čitelně specifikovat
    Pěkná teorie. :-) To je asi jako napsat, že C je multiplatformní jazyk a tudíž programy v něm napsané poběží všude. :-)
    5.10.2013 11:01 podlesh | skóre: 38 | Freiburg im Breisgau
    Rozbalit Rozbalit vše Re: Co to je REST?
    No, pokud ho srovnáváme s assemblerem, tak ano...
    xkucf03 avatar 4.10.2013 19:26 xkucf03 | skóre: 49 | blog: xkucf03
    Rozbalit Rozbalit vše Re: Co to je REST?

    Ano, to je klíčový rozdíl. Proto to pak dopadá celkem blbě, když si někdo vybere REST a nakonec zjistí, že potřebuje volat taky nějaké procedury. Ale má to i jiná úskalí…

    Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
    4.10.2013 14:54 podlesh | skóre: 38 | Freiburg im Breisgau
    Rozbalit Rozbalit vše Re: Co to je REST?
    Ano, jistě, dá se to. Ledacos se dá.

    Ale to není vysvětlení původního výroku
    se puvodne oznacovalo (respektive u ceho ten termin vznikl)
    4.10.2013 11:27 sigma
    Rozbalit Rozbalit vše Re: Co to je REST?
    Co považuju za velké omezení toho, co se aktuálně nazývá REST (viz komentář JS1), tedy využití čistého HTTP, je nemožnost standardním způsobem zabalit více "volání" GET do jednoho HTTP požadavku. Protože ID objektu/zdroje je URL.

    Mám aplikaci, kde na zobrazení jedné stránky (pohledu, formuláře), potřebuju načíst třeba 20 zdrojů různého typu - tj. v klasickém RESTu 20 HTTP requestů, které se zařadí buď za sebe = velká latence, nebo se pošlou částečně paralelně = taky zbytečný. Částečně by to řešil SPDY protokol, ale ... Možná to ukazuje na špatný návrh API - v tomhle případě by to šlo zjednodušit vytvořením "meta-zdrojů", ale ne úplně a ztratil bych dost flexibility. XML-RPC na to má MultiCall, takže to není úplně marný use-case.
    Saljack avatar 4.10.2013 11:31 Saljack | skóre: 28 | blog: Saljack | Praha
    Rozbalit Rozbalit vše Re: Co to je REST?
    Ale to je problém v tvém návrhu ne v REST. Nic ti nebrání vytvořit zdroj, který bude vracet nějakou strukturu kombinovanou z jiných zdrojů, pokud spolu nějak souvisí. Pokud spolu nesouvisí, tak je nesmysl je volat zároveň.
    Sex, Drugs & Rock´n Roll.
    4.10.2013 15:51 sigma
    Rozbalit Rozbalit vše Re: Co to je REST?
    Souvisí spolu minimálně tak, že je chci zobrazit v aplikaci najednou. A nechci na ně posílat požadavky přes HTTP sériově, protože roundtrip linky × počet requestů = jednotky sekund, co by uživatel čekal.
    pavlix avatar 5.10.2013 21:29 pavlix | skóre: 54 | blog: pavlix
    Rozbalit Rozbalit vše Re: Co to je REST?
    Pak je asi dobré umět postavit dotaz, který ti vrátí všechna data, co potřebuješ, najednou. A je jedno, jak tomu budeš říkat.
    Já už tu vlastně ani nejsem. Abclinuxu umřelo.
    7.10.2013 19:24 sarimak
    Rozbalit Rozbalit vše Re: Co to je REST?
    Vypada to, ze pouzivas prilis jemne API (na urovni entit) pro pomalou meziprocesovou komunikaci. Asi by se vic hodilo API zverejnovat az na urovni metod/use cases. Patterns of EIP k tomu pise tohle:

    In general we prefer well-defined, self-contained business actions such as “Change Address” and “Place Order” because they give us more flexibility in orchestrating the businesses processes. It all comes down to a question of granularity and the associated trade-offs. Fine-grained interfaces can lead to sluggish systems due to an excessive number of remote calls being made or messages being sent. For example, imagine an interface that exposes a separate method to change each address field. This approach would be efficient if the communication happens inside a single application – you only update those fields that changed. In an integration scenario sending six or seven messages to update an address would be a significant overhead plus we would have to deal with synchronizing the individual messages. Fine-grained interfaces also lead to tight coupling. If we change the address format, we have to define new message formats and change all other applications to send an additional message.

    Coarse grained interfaces solve these issues. We send fewer messages and are therefore more efficient and less tightly coupled. However, interfaces that are too coarse can limit our flexibility. If Send Invoice and Change Address are combined into one external function, will we never need to change an address without sending a bill? So as always the best answer is the happy medium and depends on the specific trade-offs at work in the real-life scenario.

    http://www.eaipatterns.com/Chapter1.html
    4.10.2013 11:59 x
    Rozbalit Rozbalit vše Re: Co to je REST?
    REST není HTTP. Typické řešení je v těle jednoho POST requestu na speciální URL popsat v nějakém rozumném formátu víc GET požadavků (nebo jakýchkoli, nejen GET). Odpověď má formát ideálně stejný, nebo aspoň podobný.
    4.10.2013 12:11 sigma
    Rozbalit Rozbalit vše Re: Co to je REST?
    Tak jsme to udělali, ale překvapilo mě, že to není nijak standardnizovaná nabo běžná věc - tedy že používané nástroje s něčím takovým zpravidla nepočítají. Že REST je určitá myšlenka, a není to striktně navázané na HTTP je mi jasné, ale když jsem k tomu hledal informace nabyl jsem dojmu že se to tak dnes v 95% případů používá, a ať serverové nebo klientské knihovny co deklarují "REST podporu" s ničím jiným moc nepočítají.
    Petr Tomášek avatar 4.10.2013 13:34 Petr Tomášek | skóre: 39 | blog: Vejšplechty
    Rozbalit Rozbalit vše Re: Co to je REST?
    REST je nadstavba nad HTTP.
    multicult.fm | monokultura je zlo | welcome refugees!
    pavlix avatar 5.10.2013 21:31 pavlix | skóre: 54 | blog: pavlix
    Rozbalit Rozbalit vše Re: Co to je REST?
    Citation needed.
    Já už tu vlastně ani nejsem. Abclinuxu umřelo.
    5.10.2013 22:16 backinabag | blog: backinabag
    Rozbalit Rozbalit vše Re: Co to je REST?
    "REST je nadstavba nad HTTP."

    – Petr Tomášek
    pavlix avatar 5.10.2013 23:45 pavlix | skóre: 54 | blog: pavlix
    Rozbalit Rozbalit vše Re: Co to je REST?
    Ideální kandidát na reliable source.
    Já už tu vlastně ani nejsem. Abclinuxu umřelo.
    4.10.2013 12:45 backinabag | blog: backinabag
    Rozbalit Rozbalit vše Re: Co to je REST?
    To jsou právě ty views o kterých jsem mluvil - složitější dotazy nd databází. Další typický příklad je dotazování many-to-many relationships.
    4.10.2013 14:48 sigma
    Rozbalit Rozbalit vše Re: Co to je REST?
    Jenže ty views bych chápal tak, že si je předem musím předdefinovat, není to flexibilní. Mám v aplikaci řadu zdrojů, které na některých stránkách potřebuju samostatně, a pak mám jiné stránky, kde potřebuju načítat třeba 10-20 takových zdrojů zároveň, a to třeba podle uživatelského nastavení, nebo podle toho že designér frontendu řekne, že na "téhle stránce chci mít ještě X", nebo se třeba při každém přechodu na jinou stránku načítají znovu nějaké společné prvky. Prostě ten use-case tu je, a řešení je možnost zabalit do jednoho HTTP requestu víc REST requestů. Což není problém, jak tu další komentující navrhují, tak jsme to samozřejmě udělali, akorát běžné RESTové nástroje s tím nepočítají, a není na to žádný well-known standard, nebo jsme nic takového nenašli, a museli jsme si použité nástroje přiohýbat. Což mě překvapilo.
    4.10.2013 15:40 backinabag | blog: backinabag
    Rozbalit Rozbalit vše Re: Co to je REST?
    Ty views by mohly být i libovolně parametrizovatelné, to co jste udělali je v podstatě view (ale jenom pokud to nemůže změnit stav na serveru).
    4.10.2013 15:48 sigma
    Rozbalit Rozbalit vše Re: Co to je REST?
    Neřekl bych view, ale spíš REST MultiCall, zapouzdření víc REST GET požadavků do jednoho HTTP požadavku. I když my jsme nakonec dokonvergovali k tomu, že to není tak úplně REST, ale spíš víc RPC. Pro danou aplikaci se to nakonec hodilo víc, a lépe se s tím pracuje. Abstrakce "chci zavolat paralelně tady těch 10 funkcí, které mi vrátí nějaká data" se nakonec ukázala lepší, i když v některých místech byl zas lepší REST přístup.
    4.10.2013 18:25 backinabag | blog: backinabag
    Rozbalit Rozbalit vše Re: Co to je REST?
    Osobně mi přijde ideální kombinovat REST i RPC, s tím že RPC jenom tam kde to je nezbytně nutné (složitější změny stavu serveru nebo např. odeslání mailu).

    To co děláte se dá chápat i jako view složené z jiných view. (View definuju jako jakékoliv mapování stavu serveru na nějaký JSON.)
    4.10.2013 13:02 backinabag | blog: backinabag
    Rozbalit Rozbalit vše Re: Co to je REST?
    Ten multicall by šel řešit přidáním RPC volání do toho API (např. POST /rpc/multicall).
    Josef Kufner avatar 4.10.2013 15:21 Josef Kufner | skóre: 70
    Rozbalit Rozbalit vše Re: Co to je REST?
    Můžeš udělat GET nad kolekcí (URI o patro výš) a nechat si tak vrátit všecky entity v ní, nebo je nechat nějak profiltrovat (parametry GETu).

    Pokud chceš více dotazů v jednom spojení, použij keep-alive.
    Hello world ! Segmentation fault (core dumped)
    4.10.2013 15:44 sigma
    Rozbalit Rozbalit vše Re: Co to je REST?
    Jde o získání různých typů entit, ne nějak vyfiltrované kolekce. Např. mám stránku s detailem nějaké entity, a zároveň potřebuju načíst třeba 10 různých typů reportů (taky entita) příslušných k té entitě. Krom toho se tyhle reporty používají porůznu jinde v aplikaci samostatně, ale někdy jich prostě potřebuju víc najednou. Dělat pro ně jen kvůli tomu "kolekci", nedává moc smysl. Nebo si příště někdo vymyslí, že chce udělat stránku se srovnáním 3 entit a jejich nějakých reportů nebo jiných souvisejících dat, a zas bych musel vymýšlet extra "kolekci". Není to tenhle případ. Nebo viz můj komentář kousek výše (načítání entity která je potřeba pro všechny stránky v aplikaci vždy zároveň s dalšími, které jsou zobrazené na konkrétní stránce). Bavíme o příkladu webové aplikace čistě v JS, ale obecně vlastně jakákoliv thin client aplikace.

    Keep-alive je jasná věc, ale ty požadavky se vyřizují sériově - tj. třeba 20 × 200 ms roundtrip (když se aplikace používá z celého světa, vždycky odněkud bude) = latence 4 sekundy, neúnosné a zbytečné.
    xkucf03 avatar 5.10.2013 07:52 xkucf03 | skóre: 49 | blog: xkucf03
    Rozbalit Rozbalit vše Re: Co to je REST?
    To je trochu dilema – ono když se ta data používají na různých stránkách, tak se hodí načítat je z mezipaměti prohlížeče – v ideálním případě se ani nemusí posílat HTTP požadavek, protože data v mezipaměti jsou ještě dostatečně čerstvá. Když ale seskupíš nějaký složitější dotaz a více odpovědí, tak tohle použít už nejde – tady se hodí to mít rozsekané na co nejmenší části. Pokud tedy jsi schopný říct: po dobu dalších X minut/hodin/dní se data nebudou měnit. Jinak je potřeba poslat alespoň HTTP požadavek a odpověď 304 Not Modified (bez dat).

    Taky se tu ukazuje nevhodnost HTTP protokolu pro tvorbu aplikací – efektivní by byla obousměrná komunikace, aby i server mohl posílat události klientům (např. „data se změnila, překresli si tuhle část stránky“). Tohle se tam muselo dobastlit přes Comet nebo WebSockety.
    Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
    5.10.2013 15:04 sigma
    Rozbalit Rozbalit vše Re: Co to je REST?
    Cache v prohlížeči byla při zvažování řešení braná jako plus pro REST-like API. V dané aplikaci říct "po dobu X minut" téměř nikde nejde, takže by se dalo využít tak té HTTP 304. No a pořád tam máme ten problém s latencí a větším počtem requestů.

    Pojmenoval bych to tak, že "REST over HTTP" jak se běžně používá, je na HTTP navázáno hodně těsně - počítá se s využitím HTTP metod, cachování a tak. Vypadá to dobře, ale podle mě to je dost omezující. Když jsme došli k potřebě zapouzdřit do jednoho HTTP requestu víc REST requestů, dávalo najednou smysl dělat to trochu jinak. Navíc v některých případech může server optimalizovat získávání zdrojů, pokud ví, že je klient chce "najednou".

    Tyhle věci tam jinak máme vyřešené. Když má aplikace nějaká data buď v paměti - je to single page app, nebo v Local Storage, může poslat spolu s požadavkem verzi/hash (vlastně něco jako Etag) a server může vrátit Not-Modified.

    Další level jsou pak ty notifikace o změnách ze strany serveru. Dnes není problém použít WebSockets, ale je to pak dost komplexní problém. Server musí pro každého připojeného klienta mít mnohem větší povědomí o jeho stavu - o tom, jaká data ho "zajímají" a jaká už třeba ne. Záleží na konkrétní aplikaci, jaký by tohle mělo přínos. A taky záleží jaké má člověk k dispozici programátory, aby s takovou změnou paradigmatu byli schopni pracovat.
    5.10.2013 15:07 backinabag | blog: backinabag
    Rozbalit Rozbalit vše Re: Co to je REST?
    Taky se tu ukazuje nevhodnost HTTP protokolu pro tvorbu aplikací – efektivní by byla obousměrná komunikace, aby i server mohl posílat události klientům (např. „data se změnila, překresli si tuhle část stránky“). Tohle se tam muselo dobastlit přes Comet nebo WebSockety.
    Tohle mi přijde jako hodně zajímavý problém, pokud bych někdy dělal nějaký web, zkusil bych to navrhnout tak, aby se jakýkoliv změna stavu serveru okamžitě pushla klientovi. Takže pokud bych dal upvote nějakému blogu, tak by se to okamžitě projevilo u všech kdo by měli ten blog otevřený.
    5.10.2013 15:14 sigma
    Rozbalit Rozbalit vše Re: Co to je REST?
    Tohle vypadá zajímavě: https://www.firebase.com/
    xkucf03 avatar 5.10.2013 07:36 xkucf03 | skóre: 49 | blog: xkucf03
    Rozbalit Rozbalit vše Re: Co to je REST?

    Je nějaký standardizovaný způsob jak říct, zda „GET nad kolekcí“ má vrátit jen seznam entit nebo přímo ty entity (včetně třeba dalších vnořených dat)?

    Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
    5.10.2013 00:20 backinabag | blog: backinabag
    Rozbalit Rozbalit vše Re: Co to je REST?
    Uvažovali jste o tom, že by šlo z té JS aplikace dělat přímo databázové dotazy?
    5.10.2013 15:10 sigma
    Rozbalit Rozbalit vše Re: Co to je REST?
    No, zvažovali jsme všechno možné. Tohle by mělo dost ale: v databázi by se musela řešit uživatelská oprávnění; na řadu věcí co teď řeší API server by se musely použít databázové procedury; řada věcí načtených z DB se na API serveru ukládá do cache; a pak obecně nepovažuju za rozumné nechávat nedůvěryhodného klienta pouštět libovolné DB dotazy... možná by to pro nějakou aplikaci dávalo smysl, ale u nás ne.
    xkucf03 avatar 5.10.2013 15:31 xkucf03 | skóre: 49 | blog: xkucf03
    Rozbalit Rozbalit vše Re: Co to je REST?

    Tady vlastně jde o to, kde udělat tu hranici mezi vrstvami. V zásadě tam jsou tři:

    • datová
    • obchodní (byznys) logika
    • prezentační

    A otázka je, co dát na klienta a co na server, kde to rozdělit. Datová musí být na serveru a minimálně část prezentační na klientovi. S tím zbytkem se dá celkem dost hýbat.

    Ze serveru můžeš udělat takřka čisté úložiště dat, budeš na něm řešit jen minimum logiky (např. aby si uživatelé navzájem nepřepisovali nebo nekradli data – uživatelská oprávnění) a většina bude na klientovi. Pak potřebuješ silný jazyk/API pro dotazování a úpravy dat – tzn. SQL nebo něco podobného a budeš ho volat z klienta.

    Nebo bude hodně logiky na serveru a pak ti stačí jednoduché API – pár procedur, které se volají z klienta – ten už výsledky jen naformátuje a zobrazí.

    REST je něco mezi tím – předpokládá se více logiky na klientovi, ale zase tu chybí silný dotazovací jazyk, nástroj pro hromadné aktualizace záznamů, agregační funkce atd.

    obecně nepovažuju za rozumné nechávat nedůvěryhodného klienta pouštět libovolné DB dotazy

    V jedné své aplikaci to tak mám, dokonce je veřejně přístupná :-) Ale pro běžné weby to není, spíš na intranet. Dá se sice omezit množství dat a časový limit pro vykonání dotazu (správě nastavená databázová oprávnění jsou samozřejmost), ale i tak je to trochu risk. Lepší by v takovém případě bylo, vytvořit si vlastní dotazovací jazyk (pravděpodobně podmnožinu SQL) a ten na serveru parsovat, zkontrolovat a pak teprve přeložit na SQL dotaz a poslat do databáze.

    Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
    7.10.2013 19:37 sarimak
    Rozbalit Rozbalit vše Re: Co to je REST?
    Jen pozor, u cisteho uloziste dat se muze stat, ze bude potreba z uloziste na klienta provest neco jako SELECT * FROM a az na klientovi se bude filtrovat pres WHERE. Coz nebude skalovat.

    U filtrovani dat na serveru jeste pred stazenim zas muze snadno dojit k tomu, ze je zapotrebi pouzit tak komplikovaneho dotazovaciho jazyka, ze se kod stane neprehledny. Dotazovaci jazyky navic muzou mit vykonove problemy, ktere jsou resitelne jen obchazenim dotazovaci vrstvy (napr. primym SQL misto ORM-mapperu). A to je cesta do pekel.

    O necem podobnem pise M.Fowler na http://www.martinfowler.com/bliki/AnemicDomainModel.html
    4.10.2013 16:07 backinabag | blog: backinabag
    Rozbalit Rozbalit vše Re: Co to je REST?
    Trochu jsem upravil to jak chápu REST, už se to blíží finální verzi :)

    Server má nějaký stav. REST API je množina pohledů na ten stav. Pohled lze poloformálně definovat jako pure function, která má jediný argument – stav serveru – a vrací nějaká data, obvykle JSON. Každý pohled má nějakou URL a mohou na něm být definovány metody jako GET, POST, PUT, DELETE atd. Metoda POST je použitelná pouze pro speciální typ pohledu - kolekce.

    Jak by se resil slozitejsi problem jako presun penez z uctu A na ucet B? Napriklad pomoci pohledu /stavy_dvou_uctu?prvni=honza&druhy=pepa. Klient by nejdrive zavolal GET a ziskal by {"hozna": 10, "pepa": 10}. Potom by zavolal PUT s daty {"hozna": 5, "pepa": 15}.

    Je mozne, ze okamzite po tom, co jsem zavolal GET nekdo ten pohled zmenil – to by bylo osetreno pomoci standardnich HTTP hlavicek ETag a If-Match.
    4.10.2013 16:58 podlesh | skóre: 38 | Freiburg im Breisgau
    Rozbalit Rozbalit vše Re: Co to je REST?
    Přesun peněz mezi účty by IMCO měla být samostatná entita, protože bude určitě nutné ho později dohledat a vypsat (možná i stornovat). Navíc bude obsahovat víc údajů, typicky kdo ten přesun zadal, kdy a jak se autorizoval.... A to zanedbávám že v reálné bance nemusí být převod peněz operace provedená okamžitě a v zanedbatelném čase.

    Takže mi z toho vychází tradiční POST který vrátí URI na nově vytvořený prevod. Případně PUT, pokud se dá URI vytvořit jen tak z ničeho.
    4.10.2013 18:04 backinabag | blog: backinabag
    Rozbalit Rozbalit vše Re: Co to je REST?
    Souhlasím, to bylo jenom na ukázku úpravy několika řádků v databázi v transakci.
    xkucf03 avatar 5.10.2013 08:10 xkucf03 | skóre: 49 | blog: xkucf03
    Rozbalit Rozbalit vše Re: Co to je REST?

    Obávám se, že REST tohle není schopný vyřešit. Ostatně „nejlepší REST API je SQL“ :-) někdy se o tom chci rozepsat trochu víc do blogu.

    Ono je sice hezké říct, že máme nějaké „zdroje“ a ty se nacházejí na nějakých hezkých URL, ale nestačí to ani na základní případy užití. Chybí standardní dotazovací jazyk – musíš něco našmudlat do GET parametrů, ale každý to bude dělat jinak, chybí standardizovaný zápis dotazů jako: vytáhni mi entity typu X u kterých atribut A1 je 5 a atribut A2 je stejný jako atribut A3. Stejně tak chybí agregační funkce nebo standardní možnost částečné aktualizace entity – např. odmaž (vynuluj) u určitých entit atribut A1 nebo nastav u těchto entit atribut A1 na max(A2, A3+5).

    Další zajímavá technologie je LDAP:

    • má standardní dotazovací jazyk (ne tak silný jako SQL, ale i tak poměrně dobrý)
    • výsledky se dají ukládat do mezipaměti, databáze se dají replikovat
    • databáze jsou optimalizované pro čtení
    • standardní formát pro reprezentaci strukturovaných dat
    • bohatý systém datových typů
    • vícenásobná dědičnost
    • binární úsporný protokol
    Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
    5.10.2013 14:36 chrono
    Rozbalit Rozbalit vše Re: Co to je REST?
    O API bolo napísaných kopec zaujímavých článkov a medzi najčastejšie spomínané odporúčania patrí to, že API má poskytovať to, čo používatelia naozaj potrebujú (a nie univerzálne a/alebo zbytočne komplikované veci, ktoré nebude potrebovať/používať takmer nikto).
    xkucf03 avatar 5.10.2013 14:47 xkucf03 | skóre: 49 | blog: xkucf03
    Rozbalit Rozbalit vše Re: Co to je REST?

    Tenhle přístup znamená použít RCP a implementovat v něm právě ty metody/procedury, které budou potřeba.

    Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
    5.10.2013 15:25 backinabag | blog: backinabag
    Rozbalit Rozbalit vše Re: Co to je REST?
    Záleží na definici RESTu, pokud se bere tahle, tak s většinou transakcí by neměl být problém. Když by to nešlo, tak bych to řešil přidáním RPC funkce, na kombinaci RESTu a RPC v jednom API nevidím nic špatného :)

    SQL jako API by nemusel být špatný nápad. Těžko říct, jak složitý by bylo řešit zabezpečení a validaci.

    Replikace u LDAP - umí to i oboustrannou synchronizaci?
    6.10.2013 19:41 David Jaša | skóre: 44 | blog: Dejvův blog
    Rozbalit Rozbalit vše Re: Co to je REST?
    Jak by se resil slozitejsi problem jako presun penez z uctu A na ucet B? Napriklad pomoci pohledu /stavy_dvou_uctu?prvni=honza&druhy=pepa. Klient by nejdrive zavolal GET a ziskal by {"hozna": 10, "pepa": 10}. Potom by zavolal PUT s daty {"hozna": 5, "pepa": 15}.
    Proč ne POST na /ucet/<pepovo_ID>/prevod {"prijemce": "honza"}? V tvém přístupu by stejně kód na serveru musel kontrolovat, jestli sedí součet, a pak teprve provést transakci, tak proč dávat klientům prostor pro chyby? Jinak PUT by mě seděl třeba na změnu trvalého bydliště, ale ne na pohyby na účtě, ty se dějí na základě nějaké operace, proto by se měla volat ta operace a v jejím rámci by mělo dojít k pohybu.
    6.10.2013 21:31 backinabag | blog: backinabag
    Rozbalit Rozbalit vše Re: Co to je REST?
    Tohle bylo spíš na ukázku:
    • atypického view, do kterého jde i zapisovat
    • úpravy více řádků v transakci

    V reálném světě bych transakce řešil asi PUTem nebo POSTem do /transactions nebo přes RPC.

    Pokud myslíš POST na /ucet/[pepovo_ID]/prevod (ne tedy do kolekce prevody), tak to je RPC, ne REST. (Pokud to je RPC záměrně, tak bych na to použil neRESTovou URL typu /call/transfer_money.)

    To /stavy_dvou_uctu právě že není operace – je to resource (= podmnožina stavu serveru = pohled na stav serveru). Je to v principu to samé jako změna bydliště.
    xkucf03 avatar 6.10.2013 21:47 xkucf03 | skóre: 49 | blog: xkucf03
    Rozbalit Rozbalit vše Re: Co to je REST?

    Zrovna tohle je špatný příklad – příkaz k převodu peněz je sám o sobě záznamem (zdrojem) → vytváříš tedy tento záznam, ten pak projde nějakým procesem a teprve v důsledku toho se změní hodnoty v jiných záznamech (stavy účtů). REST tu celkem dobře jde použít.

    Tímhle způsobem se dá rozsekat skoro všechno – POST/PUT kterým zadáš požadavek a pak si někde jinde přes GET vyzvedneš odpověď. Takhle se na REST dá napasovat prakticky cokoli, ale mnohdy to není moc elegantní a nedává to moc velký smysl (lépe se hodí procedury – lépe vystihují povahu řešené úlohy).

    Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes

    Založit nové vláknoNahoru

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.