REST
REST (ot angl. Representational State Transfer -- <
REST-zapros predstavliaet soboi obychnyi HTTP-zapros (obychno GET ili POST), a neobkhodimye dannye peredaiutsia v kachestve parametrov zaprosa[3][4].
Dlia veb-sluzhb, postroennykh s uchiotom REST (to est' ne narushaiushchikh nakladyvaemykh im ogranichenii), primeniaiut termin <<RESTful>>.
V otlichie ot veb-servisov (veb-sluzhb) na osnove SOAP, ne sushchestvuet <
Istoriia termina
[pravit' | pravit' kod]Khotia dannaia kontseptsiia lezhit v samoi osnove Vsemirnoi pautiny, termin <
Stil' <
Svoistva arkhitektury REST
[pravit' | pravit' kod]Svoistva arkhitektury, kotorye zavisiat ot ogranichenii, nalozhennykh na REST-sistemy:
- Proizvoditel'nost': vzaimodeistvie komponentov sistemy mozhet iavliat'sia dominiruiushchim faktorom proizvoditel'nosti i effektivnosti seti s tochki zreniia pol'zovatelia;
- Masshtabiruemost' dlia obespecheniia bol'shogo chisla komponentov i vzaimodeistvii komponentov.
Roi Filding (odin iz glavnykh avtorov spetsifikatsii protokola HTTP) opisyvaet vliianie arkhitektury REST na masshtabiruemost' sleduiushchim obrazom:
- Prostota unifitsirovannogo interfeisa;
- Otkrytost' komponentov k vozmozhnym izmeneniiam dlia udovletvoreniia izmeniaiushchikhsia potrebnostei (dazhe pri rabotaiushchem prilozhenii);
- Prozrachnost' sviazei mezhdu komponentami sistemy dlia servisnykh sluzhb;
- Perenosimost' komponentov sistemy putiom peremeshcheniia programmnogo koda vmeste s dannymi;
- Nadiozhnost', vyrazhaiushchaiasia v ustoichivosti k otkazam na urovne sistemy pri nalichii otkazov otdel'nykh komponentov, soedinenii ili dannykh.[3]
Trebovaniia k arkhitekture REST
[pravit' | pravit' kod]Sushchestvuet piat' obiazatel'nykh[8][9] ogranichenii dlia postroeniia raspredelionnykh REST-prilozhenii po Fildingu[3][10], i odno neobiazatel'noe.
Nakladyvaemye ogranicheniia opredeliaiut rabotu servera v tom, kak on mozhet obrabatyvat' i otvechat' na zaprosy klientov. Deistvuia v ramkakh etikh ogranichenii, sistema priobretaet takie zhelatel'nye svoistva, kak proizvoditel'nost', masshtabiruemost', prostota, sposobnost' k izmeneniiam, perenosimost', otslezhivaemost' i nadiozhnost'.
Esli servis-prilozhenie narushaet liuboe iz etikh ogranichitel'nykh uslovii, dannuiu sistemu nel'zia schitat' REST-sistemoi[3].
Obiazatel'nymi usloviiami-ogranicheniiami iavliaiutsia:
1. Model' klient-server
[pravit' | pravit' kod]Pervym ogranicheniem, primenimym k gibridnoi modeli, iavliaetsia privedenie arkhitektury k modeli klient-server. Razgranichenie potrebnostei iavliaetsia printsipom, lezhashchim v osnove dannogo nakladyvaemogo ogranicheniia. Otdelenie potrebnosti interfeisa klienta ot potrebnostei servera, khraniashchego dannye, povyshaet perenosimost' koda klientskogo interfeisa na drugie platformy, a uproshchenie servernoi chasti uluchshaet masshtabiruemost'. Naibol'shee zhe vliianie na vsemirnuiu pautinu, pozhalui, imeet samo razgranichenie, kotoroe pozvoliaet otdel'nym chastiam razvivat'sia nezavisimo drug ot druga, podderzhivaia potrebnosti v razvitii interneta so storony razlichnykh organizatsii.[3]
2. Otsutstvie sostoianiia
[pravit' | pravit' kod]Protokol vzaimodeistviia mezhdu klientom i serverom trebuet sobliudeniia sleduiushchego usloviia: v period mezhdu zaprosami klienta nikakaia informatsiia o sostoianii klienta na servere ne khranitsia (Stateless protocol ili <
Vo vremia obrabotki klientskikh zaprosov schitaetsia, chto klient nakhoditsia v perekhodnom sostoianii. Kazhdoe otdel'noe sostoianie prilozheniia predstavleno sviaziami, kotorye mogut byt' zadeistvovany pri sleduiushchem obrashchenii klienta.
3. Keshirovanie
[pravit' | pravit' kod]Kak i vo Vsemirnoi pautine, klienty, a takzhe promezhutochnye uzly, mogut vypolniat' keshirovanie otvetov servera. Otvety servera, v svoiu ochered', dolzhny imet' iavnoe ili neiavnoe oboznachenie kak keshiruemye ili nekeshiruemye s tsel'iu predotvrashcheniia polucheniia klientami ustarevshikh ili nevernykh dannykh v otvet na posleduiushchie zaprosy. Pravil'noe ispol'zovanie keshirovaniia sposobno chastichno ili polnost'iu ustranit' nekotorye problemy klient-servernogo vzaimodeistviia, eshchio bol'she povyshaia proizvoditel'nost' i masshtabiruemost' sistemy.
4. Edinoobrazie interfeisa
[pravit' | pravit' kod]Nalichie unifitsirovannogo interfeisa iavliaetsia fundamental'nym trebovaniem dizaina REST-servisov[3]. Unifitsirovannye interfeisy pozvoliaiut kazhdomu iz servisov razvivat'sia nezavisimo.
K unifitsirovannym interfeisam pred'iavliaiutsia sleduiushchie chetyre ogranichitel'nykh usloviia[11][12]:
Identifikatsiia resursov
Vse resursy identifitsiruiutsia v zaprosakh, naprimer, s ispol'zovaniem URI v internet-sistemakh. Resursy kontseptual'no otdeleny ot predstavlenii, kotorye vozvrashchaiutsia klientam. Naprimer, server mozhet otsylat' dannye iz bazy dannykh v vide HTML, XML ili JSON, ni odin iz kotorykh ne iavliaetsia tipom khraneniia vnutri servera.
Manipuliatsiia resursami cherez predstavlenie
Esli klient khranit predstavlenie resursa, vkliuchaia metadannye -- on obladaet dostatochnoi informatsiei dlia modifikatsii ili udaleniia resursa.
<
Kazhdoe soobshchenie soderzhit dostatochno informatsii, chtoby poniat', kakim obrazom ego obrabatyvat'. K primeru, obrabotchik soobshcheniia (parser), neobkhodimyi dlia izvlecheniia dannykh, mozhet byt' ukazan v spiske MIME-tipov[3].
Gipermedia kak sredstvo izmeneniia sostoianiia prilozheniia (HATEOAS)
Klienty izmeniaiut sostoianie sistemy tol'ko cherez deistviia, kotorye dinamicheski opredeleny v gipermedia na servere (k primeru, giperssylki v gipertekste). Iskliuchaia prostye tochki vkhoda v prilozhenie, klient ne mozhet predpolozhit', chto dostupna kakaia-to operatsiia nad kakim-to resursom, esli ne poluchil informatsiiu ob etom v predydushchikh zaprosakh k serveru. Ne sushchestvuet universal'nogo formata dlia predostavleniia ssylok mezhdu resursami, Web Linking (RFC 5988 -> RFC 8288) i JSON Hypermedia API Language Arkhivnaia kopiia ot 27 iiunia 2014 na Wayback Machine iavliaiutsia dvumia populiarnymi formatami predostavleniia ssylok v REST HYPERMEDIA servisakh.
5. Sloi
[pravit' | pravit' kod]Klient obychno ne sposoben tochno opredelit', vzaimodeistvuet li on napriamuiu s serverom ili zhe s promezhutochnym uzlom, v sviazi s ierarkhicheskoi strukturoi setei (podrazumevaia, chto takaia struktura obrazuet sloi). Primenenie promezhutochnykh serverov sposobno povysit' masshtabiruemost' za schiot balansirovki nagruzki i raspredelionnogo keshirovaniia. Promezhutochnye uzly takzhe mogut podchiniat'sia politike bezopasnosti s tsel'iu obespecheniia konfidentsial'nosti informatsii[13].
6. Kod po trebovaniiu (neobiazatel'noe ogranichenie)
[pravit' | pravit' kod]REST mozhet pozvolit' rasshirit' funktsional'nost' klienta za schiot zagruzki koda s servera v vide appletov ili skriptov. Filding utverzhdaet, chto dopolnitel'noe ogranichenie pozvoliaet proektirovat' arkhitekturu, podderzhivaiushchuiu zhelaemuiu funktsional'nost' v obshchem sluchae, no, vozmozhno, za iskliucheniem nekotorykh kontekstov.
Preimushchestva
[pravit' | pravit' kod]Roi Filding ukazyval, chto prilozheniia, ne sootvetstvuiushchie privedionnym usloviiam, ne mogut nazyvat'sia REST-prilozheniiami. Esli zhe vse usloviia sobliudeny, to, po ego mneniiu, prilozhenie poluchit sleduiushchie preimushchestva[3][10]:
- Nadiozhnost' (za schiot otsutstviia neobkhodimosti sokhraniat' informatsiiu o sostoianii klienta, kotoraia mozhet byt' uteriana);
- Proizvoditel'nost' (za schiot ispol'zovaniia kesha);
- Masshtabiruemost';
- Prozrachnost' sistemy vzaimodeistviia (osobenno neobkhodimaia dlia prilozhenii obsluzhivaniia seti);
- Prostota interfeisov;
- Portativnost' komponentov;
- Liogkost' vneseniia izmenenii;
- Sposobnost' evoliutsionirovat', prisposablivaias' k novym trebovaniiam (na primere Vsemirnoi pautiny).
Primechaniia
[pravit' | pravit' kod]- | Chto takoe REST API (rus.). Data obrashcheniia: 11 avgusta 2021. Arkhivirovano 11 avgusta 2021 goda.
- | Mashnin Timur Sergeevich. Tekhnologiia Web-servisov platformy Java. -- BKhV-Peterburg, 2012. -- S. 115. -- 560 s. -- ISBN 978-5-9775-0778-3.
- | 1 2 3 4 5 6 7 8 9 10 Chapter 5 of Roy Fielding's dissertation <
> Arkhivnaia kopiia ot 13 maia 2021 na Wayback Machine - | 1 2 Fielding discussing the definition of the REST term . Tech.groups.yahoo.com. Data obrashcheniia: 28 noiabria 2013. Arkhivirovano 22 oktiabria 2010 goda.
- | Dokumentatsiia po API (rus.). Data obrashcheniia: 10 avgusta 2025.
- | Fielding Dissertation: CHAPTER 5: Representational State Transfer (REST) . www.ics.uci.edu. Data obrashcheniia: 1 dekabria 2015. Arkhivirovano 13 maia 2021 goda.
- | rest-discuss : Message: Re: [rest-discuss] RFC for REST? (11 noiabria 2009). Data obrashcheniia: 1 dekabria 2015. Arkhivirovano 11 noiabria 2009 goda.
- | Thomas Erl, Benjamin Carlyle, Cesare Pautasso, Raj Balasubramanian. 5.1 // SOA with REST / Thomas Erl. -- Prentice Hall, 2013. -- ISBN 978-0-13-701251-0.
- | Richardson, Leonard; Ruby, Sam (2007), RESTful Web service, O'Reilly Media, ISBN 978-0-596-52926-0, Data obrashcheniia: 18 ianvaria 2011,
The main topic of this book is the web service architectures which can be considered RESTful: those which get a good score when judged on the criteria set forth in Roy Fielding's dissertation.
. Istochnik . Data obrashcheniia: 30 noiabria 2016. Arkhivirovano 19 fevralia 2012 goda. - | 1 2 Thomas Erl, Benjamin Carlyle, Cesare Pautasso, Raj Balasubramanian. 5.1 // SOA with REST. -- Prentice Hall, 2013. -- ISBN 978-0-13-701251-0.
- | Wilde, Pautasso, 2011, REST Definition.
- | N. L. Podkolodnyi, A. V. Semenychev, D. A. Rasskazov, V. G. Borovskii, E. A. Anan'ko, E. V. Ignat'eva, N. N. Podkolodnaia, O. A. Podkolodnaia, N. A. Kolchanov Raspredelionnaia sistema RESTful-web-servisov dlia rekonstruktsii i analiza gennykh setei. Vavilovskii zhurnal genetiki i selektsii, t. 16, N 4/1, 2012
- | Hartley Brody. How HTTPS Secures Connections: What Every Web Dev Should Know (angl.). Arkhivirovano 24 dekabria 2015 goda.
Literatura
[pravit' | pravit' kod]- Erik Wilde, Cesare Pautasso. REST: From Research to Practice. -- Springer Science & Business Media, 2011. -- 528 p. -- ISBN 978-1-4419-8303-9.
Ssylki
[pravit' | pravit' kod]- Roy Fielding. Architectural Styles and the Design of Network-based Software Architectures (angl.) (2000). Data obrashcheniia: 20 fevralia 2009. Arkhivirovano 15 maia 2012 goda.
- Cesare Pautasso; Olaf Zimmerman; Frank Leymann.: . RESTful Web Services vs. Big Web Services: Making the Right Architectural Decision (angl.). 17th International World Wide Web Conference (WWW2008). Data obrashcheniia: 20 fevralia 2009. Arkhivirovano 15 maia 2012 goda.
- Dzhon Flanders. Vvedenie v sluzhby RESTful s ispol'zovaniem WCF . MSDN Magazine (ianvar' 2009). Data obrashcheniia: 20 fevralia 2009. Arkhivirovano 15 maia 2012 goda.
- Alex Rodriguez. RESTful Web services: The basics (angl.). IBM. Data obrashcheniia: 15 dekabria 2015. Arkhivirovano 22 dekabria 2015 goda.
- Todd Fredrich. REST API Tutorial (angl.). Data obrashcheniia: 27 oktiabria 2016. Arkhivirovano 25 fevralia 2017 goda.