Àðõèòåêòóðà rest · Àðõèòåêòóðà rest 30 Îïèñàíèå ðåñóðñîâ...
TRANSCRIPT
![Page 1: Àðõèòåêòóðà REST · Àðõèòåêòóðà rest 30 Îïèñàíèå ðåñóðñîâ ïðèëîæåíèÿ Ïðèëîæåíèå ïîêàçûâàåò íîâîñòíûå ñòàòüè](https://reader031.vdocuments.site/reader031/viewer/2022021911/5c28b2ca09d3f2563e8c3ac5/html5/thumbnails/1.jpg)
Àðõèòåêòóðà REST
Îòäåë R&D
Ìàðêåòèíãîâàÿ ãðóïïà Òåêàðò
15 èþíÿ 2009 ã.
Университет Текарт
![Page 2: Àðõèòåêòóðà REST · Àðõèòåêòóðà rest 30 Îïèñàíèå ðåñóðñîâ ïðèëîæåíèÿ Ïðèëîæåíèå ïîêàçûâàåò íîâîñòíûå ñòàòüè](https://reader031.vdocuments.site/reader031/viewer/2022021911/5c28b2ca09d3f2563e8c3ac5/html5/thumbnails/2.jpg)
Университет Текарт
×òî òàêîå REST
REpresentationalStateTransfer
Íå ïðîòîêîë, à ïàòòåðí ïðîåêòèðîâàíèÿ;
Ïðèíöèïû ñôîðìóëèðîâàíû â 2000 ãîäó Ðîåì Ôèëäèíãîì;
 äèññåðòàöèè Ôèëäèíãà ñèñòåìàòèçèðîâàíû ïðèíöèïû,ðåàëèçîâàííûå ðàíåå â âèäå ïðîòîêîëà HTTP.
WWW èçíà÷àëüíî ïîñòðîåí íà ïðèíöèïàõ REST.
Àðõèòåêòóðà REST 2
![Page 3: Àðõèòåêòóðà REST · Àðõèòåêòóðà rest 30 Îïèñàíèå ðåñóðñîâ ïðèëîæåíèÿ Ïðèëîæåíèå ïîêàçûâàåò íîâîñòíûå ñòàòüè](https://reader031.vdocuments.site/reader031/viewer/2022021911/5c28b2ca09d3f2563e8c3ac5/html5/thumbnails/3.jpg)
Îñíîâíûå ïðèíöèïû
Ñôîðìóëèðóåì áàçîâûå ïðèíöèïû àðõèòåêòóðû REST
![Page 4: Àðõèòåêòóðà REST · Àðõèòåêòóðà rest 30 Îïèñàíèå ðåñóðñîâ ïðèëîæåíèÿ Ïðèëîæåíèå ïîêàçûâàåò íîâîñòíûå ñòàòüè](https://reader031.vdocuments.site/reader031/viewer/2022021911/5c28b2ca09d3f2563e8c3ac5/html5/thumbnails/4.jpg)
Университет Текарт
Âñå ÿâëÿåòñÿ ðåñóðñîì
Ïðèëîæåíèå ïðåäñòàâëÿåò ñîáîé íàáîð ðåñóðñîâ(èñòî÷íèêîâ èíôîðìàöèè);
Êàæäûé ðåñóðñ îäíîçíà÷íî èäåíòèôèöèðóåòñÿ ñâîèì URI:
http://music.site/users/max
http://music.site/albums/8
http://music.site/max/playlist/20
Êîëëåêöèÿ ðåñóðñîâ òàêæå ÿâëÿåòñÿ ðåñóðñîì:
http://music.site/users/max/playlist/
Àðõèòåêòóðà REST 4
![Page 5: Àðõèòåêòóðà REST · Àðõèòåêòóðà rest 30 Îïèñàíèå ðåñóðñîâ ïðèëîæåíèÿ Ïðèëîæåíèå ïîêàçûâàåò íîâîñòíûå ñòàòüè](https://reader031.vdocuments.site/reader031/viewer/2022021911/5c28b2ca09d3f2563e8c3ac5/html5/thumbnails/5.jpg)
Университет Текарт
Îäèí ðåñóðñ � ðàçíûå ïðåäñòàâëåíèÿ
Êàæäîìó ïðåäñòàâëåíèþ ñîîòâåòñòâóåò ñâîé URL,íåñêîëüêî ïðåäñòàâëåíèé � íåñêîëüêî URL;
Ôîðìàòû ïðåäñòàâëåíèé: ñòàíäàðòíûå MIME-òèïû,ðàçëè÷íûå ñõåìû XML, ìèêðîôîðìàòû.
/users/max/playlist/20.html - text/html
/users/max/playlist/index.xml - xml/atom
/users/max/playlist/index.json - application/json
Èñïîëüçîâàíèå ñòàíäàðòíûõ ôîðìàòîâ óïðîùàåòèñïîëüçîâàíèå ñåðâèñà êëèåíòîì.
Àðõèòåêòóðà REST 5
![Page 6: Àðõèòåêòóðà REST · Àðõèòåêòóðà rest 30 Îïèñàíèå ðåñóðñîâ ïðèëîæåíèÿ Ïðèëîæåíèå ïîêàçûâàåò íîâîñòíûå ñòàòüè](https://reader031.vdocuments.site/reader031/viewer/2022021911/5c28b2ca09d3f2563e8c3ac5/html5/thumbnails/6.jpg)
Университет Текарт
Ìíîæåñòâî ðåñóðñîâ � ìèíèìóì îïåðàöèé
 èäåàëå � âñåãî 4 äåéñòâèÿ, ïîääåðæèâàåìûå â HTTP
GET POST PUT DELETE
ïîèñê ñîçäàíèå èçìåíåíèå óäàëåíèå
SELECT INSERT UPDATE DELETE
HTTP � íå òðàíñïîðòíûé ïðîòîêîë, à ïðîòîêîë óðîâíÿïðèëîæåíèÿ.
Àðõèòåêòóðà REST 6
![Page 7: Àðõèòåêòóðà REST · Àðõèòåêòóðà rest 30 Îïèñàíèå ðåñóðñîâ ïðèëîæåíèÿ Ïðèëîæåíèå ïîêàçûâàåò íîâîñòíûå ñòàòüè](https://reader031.vdocuments.site/reader031/viewer/2022021911/5c28b2ca09d3f2563e8c3ac5/html5/thumbnails/7.jpg)
Университет Текарт
URL ðåñóðñîâ è äåéñòâèÿ
URI óêàçûâàåò íà ðåñóðñ;
URL óêàçûâàþò íà ïðåäñòàâëåíèå ðåñóðñà;
Äåéñòâèÿ íå êîäèðóþòñÿ â URL!
íå REST REST
POST /albums/create POST /albums/GET /albums/show/2 GET /albums/2POST /albums/update/2 PUT /albums/2POST /albums/destroy/2 DELETE /albums/2
Àðõèòåêòóðà REST 7
![Page 8: Àðõèòåêòóðà REST · Àðõèòåêòóðà rest 30 Îïèñàíèå ðåñóðñîâ ïðèëîæåíèÿ Ïðèëîæåíèå ïîêàçûâàåò íîâîñòíûå ñòàòüè](https://reader031.vdocuments.site/reader031/viewer/2022021911/5c28b2ca09d3f2563e8c3ac5/html5/thumbnails/8.jpg)
Университет Текарт
GET
Ïðåäñòàâëåíèå ðåñóðñà â îïðåäåëåííîì ôîðìàòå ïî URL.
Âûáîð ïðåäñòàâëåíèÿ:
ïî ðàñøèðåíèþ:
/albums/234.html /albums/234.xml /albums/234.json
ïî HTTP-çàãîëîâêó Accept;
â çàâèñèìîñòè îò ïàðàìåòðîâ êëèåíòà.
×àñòî èìååò ñìûñë íàçíà÷èòü ôîðìàò ïî óìîë÷àíèþ.
Àðõèòåêòóðà REST 8
![Page 9: Àðõèòåêòóðà REST · Àðõèòåêòóðà rest 30 Îïèñàíèå ðåñóðñîâ ïðèëîæåíèÿ Ïðèëîæåíèå ïîêàçûâàåò íîâîñòíûå ñòàòüè](https://reader031.vdocuments.site/reader031/viewer/2022021911/5c28b2ca09d3f2563e8c3ac5/html5/thumbnails/9.jpg)
Университет Текарт
GET: ìîäèôèêàòîðû
Èíîãäà íåîáõîäèìû ðàçíûå ïðåäñòàâëåíèÿ â îäíîì ôîðìàòå.
Èñïîëüçóåì ìîäèôèêàòîðû:
ïðîñìîòð èíôîðìàöèè îá àëüáîìå GET /albums/23.htmlôîðìà ðåäàêòèðîâàíèÿ àëüáîìà GET /albums/23/edit.htmlôîðìà íîâîãî àëüáîìà GET /albums/new.html
Áîëåå îáùåå ðåøåíèå � behaviour-ðåñóðñ (ñì. äàëüøå).
Àðõèòåêòóðà REST 9
![Page 10: Àðõèòåêòóðà REST · Àðõèòåêòóðà rest 30 Îïèñàíèå ðåñóðñîâ ïðèëîæåíèÿ Ïðèëîæåíèå ïîêàçûâàåò íîâîñòíûå ñòàòüè](https://reader031.vdocuments.site/reader031/viewer/2022021911/5c28b2ca09d3f2563e8c3ac5/html5/thumbnails/10.jpg)
Университет Текарт
POST
Èçìåíåíèå ÷àñòè ðåñóðñà, êîòîðàÿ íåäîñòóïíà êàê îòäåëüíûéðåñóðñ.
Ñîçäàíèå íîâîãî ðåñóðñà â êîëëåêöèè ðåñóðñîâ;
POST /albums/
HTTP 201 CREATED
Location: /albums/315.html - íîâûé àëüáîì
Àíàëîã ïðèâû÷íîãî RPC: óäàëåííûé âûçîâ ìåòîäà.
POST /albums/206/publish.html
Íàðóøåíèå ïðàâèë, àëüòåðíàòèâà � behaviour-ðåñóðñ.
Àðõèòåêòóðà REST 10
![Page 11: Àðõèòåêòóðà REST · Àðõèòåêòóðà rest 30 Îïèñàíèå ðåñóðñîâ ïðèëîæåíèÿ Ïðèëîæåíèå ïîêàçûâàåò íîâîñòíûå ñòàòüè](https://reader031.vdocuments.site/reader031/viewer/2022021911/5c28b2ca09d3f2563e8c3ac5/html5/thumbnails/11.jpg)
Университет Текарт
PUT è DELETE
Àòîìàðíîå èçìåíåíèå ñîñòîÿíèÿ ðåñóðñà. Ïðèìåíÿåòñÿ ê
ðåñóðñó â öåëîì, à íå ê îòäåëüíûì ÷àñòÿì.
PUT /albums/23.html
HTTP 200 OK
Location: /albums/
DELETE /albums/23.html
HTTP 200 OK
Location: /albums/
PUT è DELETE ïëîõî ïîääåðæèâàþòñÿ áðàóçåðàìè ⇒ ýìóëÿöèÿ÷åðåç POST.
Àðõèòåêòóðà REST 11
![Page 12: Àðõèòåêòóðà REST · Àðõèòåêòóðà rest 30 Îïèñàíèå ðåñóðñîâ ïðèëîæåíèÿ Ïðèëîæåíèå ïîêàçûâàåò íîâîñòíûå ñòàòüè](https://reader031.vdocuments.site/reader031/viewer/2022021911/5c28b2ca09d3f2563e8c3ac5/html5/thumbnails/12.jpg)
Университет Текарт
Stateless ïðîòîêîë
Ñîñòîÿíèå êëèåíòà õðàíèòñÿ òîëüêî íà êëèåíòå, íåòñåðâåðíûõ ñåññèé;
Âñÿ èíôîðìàöèÿ, íåîáõîäèìàÿ äëÿ îáðàáîòêè çàïðîñà,ñîäåðæèòñÿ â ñàìîì çàïðîñå.
Ïëþñû:
Ðåøåíèå ëåãêî ìàñøòàáèðóåòñÿ;
Êåøèðîâàíèå, ïðîêñèðîâàíèå è ò.ä.
Óäîáíî äëÿ íåèíòåðàêòèâíûõ ñåðâèñîâ.
Ìèíóñû:
Äîñòèæèìî íà rich-êëèåíòå (AJAX, FLEX ...)
Àðõèòåêòóðà REST 12
![Page 13: Àðõèòåêòóðà REST · Àðõèòåêòóðà rest 30 Îïèñàíèå ðåñóðñîâ ïðèëîæåíèÿ Ïðèëîæåíèå ïîêàçûâàåò íîâîñòíûå ñòàòüè](https://reader031.vdocuments.site/reader031/viewer/2022021911/5c28b2ca09d3f2563e8c3ac5/html5/thumbnails/13.jpg)
Университет Текарт
Stateless ïðîòîêîë: êëàññè÷åñêîå web-ïðèëîæåíèå
Õðàíåíèå ñîñòîÿíèÿ íà êëèåíòå çàòðóäíåíî:
Õðàíåíèå ñîñòîÿíèÿ â âèäå ïîñòîÿííî ïåðåäàâàåìîãîíàáîðà ïàðàìåòðîâ;
Cookies.
Åñëè äîáàâèì ñåññèè, ðàçðàáîòêà óïðîñòèòñÿ,íî ýòî óæå íåREST. Òåì íå ìåíåå, èñïîëüçóÿ îñòàëüíûå ïðèíöèïû, âñå ðàâíîâûèãðûâàåì:
Ïðîñòàÿ è ïðåäñêàçóåìàÿ ñòðóêòóðà ïðèëîæåíèÿ;
Èñïîëüçîâàíèå àëüòåðíàòèâíûõ ïðåäñòàâëåíèé;
Ìîæíî âûäåëèòü íàáîð stateless-ñåðâèñîâ äëÿ äðóãèõâèäîâ êëèåíòîâ.
Àðõèòåêòóðà REST 13
![Page 14: Àðõèòåêòóðà REST · Àðõèòåêòóðà rest 30 Îïèñàíèå ðåñóðñîâ ïðèëîæåíèÿ Ïðèëîæåíèå ïîêàçûâàåò íîâîñòíûå ñòàòüè](https://reader031.vdocuments.site/reader031/viewer/2022021911/5c28b2ca09d3f2563e8c3ac5/html5/thumbnails/14.jpg)
Îñíîâíûå ïðèíöèïû
Âîïðîñû?
![Page 15: Àðõèòåêòóðà REST · Àðõèòåêòóðà rest 30 Îïèñàíèå ðåñóðñîâ ïðèëîæåíèÿ Ïðèëîæåíèå ïîêàçûâàåò íîâîñòíûå ñòàòüè](https://reader031.vdocuments.site/reader031/viewer/2022021911/5c28b2ca09d3f2563e8c3ac5/html5/thumbnails/15.jpg)
Ïàòòåðíû REST
Âûäåëèì îñíîâíûå ýëåìåíòû ñòðóêòóðû REST-ïðèëîæåíèé.
![Page 16: Àðõèòåêòóðà REST · Àðõèòåêòóðà rest 30 Îïèñàíèå ðåñóðñîâ ïðèëîæåíèÿ Ïðèëîæåíèå ïîêàçûâàåò íîâîñòíûå ñòàòüè](https://reader031.vdocuments.site/reader031/viewer/2022021911/5c28b2ca09d3f2563e8c3ac5/html5/thumbnails/16.jpg)
Университет Текарт
Ñóùíîñòü
×òåíèå ÷åðåç GET, èçìåíåíèå ÷åðåç PUT è DELETE
Îòäåëüíûå ñâîéñòâà ðåñóðñà ìîãóò áûòü ïðåäñòàâëåíû êàêâëîæåííûå ðåñóðñû.
GET /resource âûáîðêà âñåãî ðåñóðñà, ïàðàìåòðû çàïðîñà � âûáîðêà ïî ÷àñòÿì
PUT /resource çàìåíà âñåãî ðåñóðñà è âëîæåííûõ ðåñóðñîâ
DELETE /resource óäàëåíèå âñåãî ðåñóðñà è âëîæåííûõ ðåñóðñîâ
GET /resource/nested âûáîðêà âëîæåííîãî ðåñóðñà, ïàðàìåòðû � âûáîðêà ïî ÷àñòÿì
PUT /resource/nested çàìåíà âñåãî âëîæåííîãî ðåñóðñà è åãî âëîæåííûõ ðåñóðñîâ
DELETE /resource/nested óäàëåíèå âñåãî âëîæåííîãî ðåñóðñà è åãî ïîäðåñóðñîâ
* /resource/nested âëîæåííûé ðåñóðñ ìîæåò ïîääåðæèâàòü äîïîëíèòåëüíûå äåéñòâèÿ
Àðõèòåêòóðà REST 16
![Page 17: Àðõèòåêòóðà REST · Àðõèòåêòóðà rest 30 Îïèñàíèå ðåñóðñîâ ïðèëîæåíèÿ Ïðèëîæåíèå ïîêàçûâàåò íîâîñòíûå ñòàòüè](https://reader031.vdocuments.site/reader031/viewer/2022021911/5c28b2ca09d3f2563e8c3ac5/html5/thumbnails/17.jpg)
Университет Текарт
Êîíòåéíåð
Entity Pattern + âîçìîæíîñòü äèíàìè÷åñêè ñîçäàâàòü èóäàëÿòü âëîæåííûå ðåñóðñû.
Ïîñëå ñîçäàíèÿ íîâîãî ðåñóðñà äîëæíî áûòü âîçâðàùåíîåãî ìåñòîïîëîæåíèå.
GET /resource âûáîðêà âñåãî ðåñóðñà, ïàðàìåòðû çàïðîñà � âûáîðêà ïî ÷àñòÿì
PUT /resource çàìåíà âñåãî ðåñóðñà è âëîæåííûõ ðåñóðñîâ
DELETE /resource óäàëåíèå âñåãî ðåñóðñà è âëîæåííûõ ðåñóðñîâ
POST /resource ñîçäàíèå âëîæåííîãî ðåñóðñà
GET /resource/nested âûáîðêà âëîæåííîãî ðåñóðñà, ïàðàìåòðû � âûáîðêà ïî ÷àñòÿì
PUT /resource/nested çàìåíà âñåãî âëîæåííîãî ðåñóðñà è åãî âëîæåííûõ ðåñóðñîâ
DELETE /resource/nested óäàëåíèå âñåãî âëîæåííîãî ðåñóðñà è åãî ïîäðåñóðñîâ
* /resource/nested âëîæåííûé ðåñóðñ ìîæåò ïîääåðæèâàòü äîïîëíèòåëüíûå äåéñòâèÿ
Àðõèòåêòóðà REST 17
![Page 18: Àðõèòåêòóðà REST · Àðõèòåêòóðà rest 30 Îïèñàíèå ðåñóðñîâ ïðèëîæåíèÿ Ïðèëîæåíèå ïîêàçûâàåò íîâîñòíûå ñòàòüè](https://reader031.vdocuments.site/reader031/viewer/2022021911/5c28b2ca09d3f2563e8c3ac5/html5/thumbnails/18.jpg)
Университет Текарт
Ïîâåäåíèå
Äîïîëíèòåëüíûå äåéñòâèÿ ìîãóò áûòü âûðàæåíû â âèäåîòäåëüíûõ âëîæåííûõ ðåñóðñîâ, ïîääåðæèâàþùèõîïåðàöèþ POST.
Ðåñóðñû, ïðåäñòàâëÿþùèå ïîâåäåíèå, íå ìîãóò ñîäåðæàòüâëîæåííûõ ðåñóðñîâ.
GET /resource ïîêàç ôîðìû äëÿ ââîäà ïàðàìåòðîâ âûïîëíÿåìîãî äåéñòâèÿ (îïöèîíàëüíî)
POST /resource âûïîëíåíèå äåéñòâèÿ
Àðõèòåêòóðà REST 18
![Page 19: Àðõèòåêòóðà REST · Àðõèòåêòóðà rest 30 Îïèñàíèå ðåñóðñîâ ïðèëîæåíèÿ Ïðèëîæåíèå ïîêàçûâàåò íîâîñòíûå ñòàòüè](https://reader031.vdocuments.site/reader031/viewer/2022021911/5c28b2ca09d3f2563e8c3ac5/html5/thumbnails/19.jpg)
Ïàòòåðíû REST
Âîïðîñû?
![Page 20: Àðõèòåêòóðà REST · Àðõèòåêòóðà rest 30 Îïèñàíèå ðåñóðñîâ ïðèëîæåíèÿ Ïðèëîæåíèå ïîêàçûâàåò íîâîñòíûå ñòàòüè](https://reader031.vdocuments.site/reader031/viewer/2022021911/5c28b2ca09d3f2563e8c3ac5/html5/thumbnails/20.jpg)
Ïðîåêòèðîâàíèåweb-ïðèëîæåíèé
Âíèìàíèå, ïðîåêò-ìåíåäæåðû!
![Page 21: Àðõèòåêòóðà REST · Àðõèòåêòóðà rest 30 Îïèñàíèå ðåñóðñîâ ïðèëîæåíèÿ Ïðèëîæåíèå ïîêàçûâàåò íîâîñòíûå ñòàòüè](https://reader031.vdocuments.site/reader031/viewer/2022021911/5c28b2ca09d3f2563e8c3ac5/html5/thumbnails/21.jpg)
Университет Текарт
Ïðåèìóùåñòâà REST
×òî ìû âûèãðûâàåì, ïåðåõîäÿ ê èñïîëüçîâàíèþ ïðèíöèïîâREST, ïóñòü äàæå è ÷àñòè÷íîìó:
Óíèôèöèðîâàííàÿ ñòðóêòóðà ïðèëîæåíèé;
Åäèíûé èíòåðôåéñ � áîëüøå âîçìîæíîñòåé ïîâòîðíîãîèñïîëüçîâàíèÿ êîäà;
Ïðîñòûå àäðåñà � áîëüøå âîçìîæíîñòåé ðàñøèðåíèÿ;
Ðàçðàáàòûâàåìûå ïðèëîæåíèÿ ëåã÷å àäàïòèðóþòñÿ ïîäJavaScript-èíòåðôåéñû íà ñòîðîíå êëèåíòà;
Íà êðóïíûõ ñàéòàõ ìîæíî ðåàëèçîâûâàòü API äëÿèñïîëüçîâàíèÿ èçâíå.
Àðõèòåêòóðà REST 21
![Page 22: Àðõèòåêòóðà REST · Àðõèòåêòóðà rest 30 Îïèñàíèå ðåñóðñîâ ïðèëîæåíèÿ Ïðèëîæåíèå ïîêàçûâàåò íîâîñòíûå ñòàòüè](https://reader031.vdocuments.site/reader031/viewer/2022021911/5c28b2ca09d3f2563e8c3ac5/html5/thumbnails/22.jpg)
Университет Текарт
×òî ïëîõî â ïðîåêòèðîâàíèè ñåé÷àñ
Ìû äàâíî èñïîëüçóåì ïàòòåðí MVC, íî ñòåðåîòèï "ñàéò �íàáîð ñòðàíèö"åùå æèâ.
Êàê ñëåäñòâèå:
Ïðîåêòèðîâàíèå ñàéòà ñâîäèòñÿ ïðåæäå âñåãî êïðîåêòèðîâàíèþ íàâèãàöèè � ýòî íåïðàâèëüíî;
Ñòðóêòóðà URL ÷àñòî ïðèâÿçûâàåòñÿ ê ñòðóêòóðåíàâèãàöèè � ýòî ïëîõî.
Ïðàâèëüíî:
Âåá-ïðèëîæåíèå � íàáîð ôóíêöèîíàëüíûõ ñåðâèñîâ,íàâèãàöèÿ âòîðè÷íà.
Àðõèòåêòóðà REST 22
![Page 23: Àðõèòåêòóðà REST · Àðõèòåêòóðà rest 30 Îïèñàíèå ðåñóðñîâ ïðèëîæåíèÿ Ïðèëîæåíèå ïîêàçûâàåò íîâîñòíûå ñòàòüè](https://reader031.vdocuments.site/reader031/viewer/2022021911/5c28b2ca09d3f2563e8c3ac5/html5/thumbnails/23.jpg)
Университет Текарт
Ïðîåêòèðîâàíèå â òåðìèíàõ ñåðâèñîâ è ðåñóðñîâ
1 Ïûòàåìñÿ ïðåäñòàâèòü ïðèëîæåíèå êàê íàáîðïðèëîæåíèé-ñåðâèñîâ, äîïóñêàþùèõ ðàçäåëüíîåîïðåäåëåíèå ðåñóðñîâ;
2 Îòäåëüíûå ñåðâèñû âûíîñÿòñÿ íà îòäåëüíûå ïîääîìåíûèëè â ïîäêàòàëîãè ïåðâîãî óðîâíÿ.
3 Äëÿ êàæäîãî ñåðâèñà ïðîåêòèðóåòñÿ ñòðóêòóðà ïðèëîæåíèÿèõ ðåñóðñîâ è ñåðâèñîâ. Àäðåñà ðåñóðñîâ îïðåäåëÿþòñÿîòíîøåíèÿìè ìåæäó íèìè, à íå íàâèãàöèåé.
4 Ïîëó÷åííàÿ ñòðóêòóðà ïîëíîñòüþ îïèñûâàåò âñåïðèëîæåíèå, è ìîæåò áûòü ðàçðàáîòàíà ìåíåäæåðîìïðîåêòà â êà÷åñòâå òåõçàäàíèÿ äëÿ ðåàëèçàöèè.
Ìîæíî ðàçðàáîòàòü ñòàíäàðòíóþ íîòàöèþ äëÿ îïèñàíèÿ ðåñóðñîâ, èç íåå ìîæíî ãåíåðèðîâàòü
âèçóàëüíûå ñõåìû è êîä îïèñàíèÿ ðåñóðñîâ íà âíóòðåííåì DSL.
Àðõèòåêòóðà REST 23
![Page 24: Àðõèòåêòóðà REST · Àðõèòåêòóðà rest 30 Îïèñàíèå ðåñóðñîâ ïðèëîæåíèÿ Ïðèëîæåíèå ïîêàçûâàåò íîâîñòíûå ñòàòüè](https://reader031.vdocuments.site/reader031/viewer/2022021911/5c28b2ca09d3f2563e8c3ac5/html5/thumbnails/24.jpg)
Ïðîåêòèðîâàíèå web-ïðèëîæåíèé
Âîïðîñû?
![Page 25: Àðõèòåêòóðà REST · Àðõèòåêòóðà rest 30 Îïèñàíèå ðåñóðñîâ ïðèëîæåíèÿ Ïðèëîæåíèå ïîêàçûâàåò íîâîñòíûå ñòàòüè](https://reader031.vdocuments.site/reader031/viewer/2022021911/5c28b2ca09d3f2563e8c3ac5/html5/thumbnails/25.jpg)
Ðåàëèçàöèÿ
Ïåðåõîäèì ê ñàìîìó èíòåðåñíîìó
![Page 26: Àðõèòåêòóðà REST · Àðõèòåêòóðà rest 30 Îïèñàíèå ðåñóðñîâ ïðèëîæåíèÿ Ïðèëîæåíèå ïîêàçûâàåò íîâîñòíûå ñòàòüè](https://reader031.vdocuments.site/reader031/viewer/2022021911/5c28b2ca09d3f2563e8c3ac5/html5/thumbnails/26.jpg)
Университет Текарт
Ðåàëèçàöèè REST
Ìíîæåñòâî ðåàëèçàöèé, ðàçëè÷íûå ïóòè íàïèñàíèÿ êîäàREST-ïðèëîæåíèé.
Êîìïîíåíòû óíèâåðñàëüíûõ ôðåéìâîðêîâ: Ruby On Rails,Django, CherryPy è ò.ä.
Îòäåëüíûå ôðåéìâîðêè: Restlets, Jersey.
Êîìïàíèÿ SUN ïðåäëîæèëà ñòàíäàðò äëÿ Java-ïðèëîæåíèé:
JAX RS (JSR 311)Ìû ðåøèëè âçÿòü åãî çà îñíîâó äëÿ íàøåé ðåàëèçàöèè.
Àðõèòåêòóðà REST 26
![Page 27: Àðõèòåêòóðà REST · Àðõèòåêòóðà rest 30 Îïèñàíèå ðåñóðñîâ ïðèëîæåíèÿ Ïðèëîæåíèå ïîêàçûâàåò íîâîñòíûå ñòàòüè](https://reader031.vdocuments.site/reader031/viewer/2022021911/5c28b2ca09d3f2563e8c3ac5/html5/thumbnails/27.jpg)
Университет Текарт
JAX RS (JSR 311)
Ïî÷åìó ìû âûáðàëè JAX RS:
Î÷åíü ïðîñòîé ñòàíäàðò;
Ïðîçðà÷íî ïåðåíîñèò ìîäåëü REST íà óðîâåíü êîäà;
Óäîáíî ðåàëèçîâàíà ðàáîòà ñ âëîæåííûìè ðåñóðñàìè;
Íå íàêëàäûâàåò îãðàíè÷åíèé íà êëàññû ðåñóðñîâ.
Íàøå ðåøåíèå íà ïðèíöèïàõ JAX RS:
Ñîáñòâåííûé DSL îïèñàíèÿ ðåñóðñîâ âìåñòî àííîòàöèé;
Îòêàç îò ïðîèçâîëüíîãî ïîðÿäêà îïðåäåëåíèÿ ðåñóðñîâ äëÿóïðîùåíèÿ àëãîðèòìà;
Ïîääåðæèâàþòñÿ íå âñå âîçìîæíîñòè � ðåàëèçóåì ïîçæå.
Àðõèòåêòóðà REST 27
![Page 28: Àðõèòåêòóðà REST · Àðõèòåêòóðà rest 30 Îïèñàíèå ðåñóðñîâ ïðèëîæåíèÿ Ïðèëîæåíèå ïîêàçûâàåò íîâîñòíûå ñòàòüè](https://reader031.vdocuments.site/reader031/viewer/2022021911/5c28b2ca09d3f2563e8c3ac5/html5/thumbnails/28.jpg)
Университет Текарт
Ðåàëèçàöèÿ: ðåñóðñû
Ðåñóðñ � ïðîñòî PHP îáúåêò;
Íå îáÿçàòåëüíî íàñëåäîâàòüñÿ îò ðîäèòåëüñêîãî êëàññàèëè ðåàëèçîâûâàòü èíòåðôåéñ.
class App_Stories_Index {public function index() { ... }public function draft() { ... }public function create() { ... }public function story($id) { return App_Stories::Story($this->db->stories->find($id));
}
Íà ïðàêòèêå èìååò ñìûñë âûíîñèòü îáùóþôóíêöèîíàëüíîñòü â ðîäèòåëüñêèé êëàññ, íî ýòî íåòðåáîâàíèå ôðåéìâîðêà.
Àðõèòåêòóðà REST 28
![Page 29: Àðõèòåêòóðà REST · Àðõèòåêòóðà rest 30 Îïèñàíèå ðåñóðñîâ ïðèëîæåíèÿ Ïðèëîæåíèå ïîêàçûâàåò íîâîñòíûå ñòàòüè](https://reader031.vdocuments.site/reader031/viewer/2022021911/5c28b2ca09d3f2563e8c3ac5/html5/thumbnails/29.jpg)
Университет Текарт
Ìåòîäû êëàññà ðåñóðñà
Êëàññ ðåñóðñà ðåàëèçóåò íàáîð ìåòîäîâ:
Âñïîìîãàòåëüíûå ìåòîäû äëÿ âíóòðåííåãî èñïîëüçîâàíèÿ;
HTTP-ìåòîäû: ìåòîäû îáðàáàòûâàþùèå ðàçëè÷íûå âèäûçàïðîñîâ;
Ñóáëîêàòîðû: ìåòîäû, ïîðîæäàþùèå ýêçåìïëÿðû êëàññîââëîæåííûõ ðåñóðñîâ.
Íà ïàðàìåòðû ìåòîäîâ íå íàêëàäûâàåòñÿ íèêàêèõîãðàíè÷åíèé.
Çíà÷åíèÿ ïàðàìåòðîâ ïîäñòàâëÿþòñÿ àâòîìàòè÷åñêèèñõîäÿ èç èìåíè ïàðàìåòðà.
Àðõèòåêòóðà REST 29
![Page 30: Àðõèòåêòóðà REST · Àðõèòåêòóðà rest 30 Îïèñàíèå ðåñóðñîâ ïðèëîæåíèÿ Ïðèëîæåíèå ïîêàçûâàåò íîâîñòíûå ñòàòüè](https://reader031.vdocuments.site/reader031/viewer/2022021911/5c28b2ca09d3f2563e8c3ac5/html5/thumbnails/30.jpg)
Университет Текарт
ßçûê îïèñàíèÿ ðåñóðñîâ
Äëÿ ïðèíÿòèÿ ðåøåíèÿ î âûçîâå ìåòîäà ðåñóðñàíåîáõîäèìî èìåòü ïîëíîå îïèñàíèå äîñòóïíûõ ðåñóðñîâ èèõ ìåòîäîâ;
Ðåàëüíî âûïîëíÿåòñÿ êîä îäíîãî èëè íåñêîëüêèõ ðåñóðñîâ,íåò íåîáõîäèìîñòè çàãðóæàòü âñå ðåñóðñû;
Îïèñàíèå ðåñóðñîâ, ñîñòàâëÿþùèõ ïðèëîæåíèå, äîëæíîáûòü îòäåëåíî îò êîäà ðåñóðñîâ;
Ñîçäàåì ñâîé DSL äëÿ îïèñàíèÿ ñòðóêòóðû ïðèëîæåíèÿ.
×àñòî ïðèëîæåíèå ìîæíî ðàçáèòü íà îòäåëüíûåíåçàâèñèìûå ïðèëîæåíèÿ � ìèíèìèçàöèÿ îáúåìà îïèñàíèÿäëÿ îòäåëüíîãî çàïðîñà.
PHP � íå ñàìûé óäîáíûé ÿçûê äëÿ íàïèñàíèÿ DSL, íî êîå-÷òî ñäåëàòü ìîæíî.
Àðõèòåêòóðà REST 30
![Page 31: Àðõèòåêòóðà REST · Àðõèòåêòóðà rest 30 Îïèñàíèå ðåñóðñîâ ïðèëîæåíèÿ Ïðèëîæåíèå ïîêàçûâàåò íîâîñòíûå ñòàòüè](https://reader031.vdocuments.site/reader031/viewer/2022021911/5c28b2ca09d3f2563e8c3ac5/html5/thumbnails/31.jpg)
Университет Текарт
Îïèñàíèå ðåñóðñîâ ïðèëîæåíèÿ
Ïðèëîæåíèå ïîêàçûâàåò íîâîñòíûå ñòàòüè è RSS-ëåíòû äëÿíîâîñòåé, ïðèíàäëåæàùèõ ê ðàçëè÷íûì ðóáðèêàì.
WS_REST_DSL::Application($this)->media_type('rss', 'application/xhtml+xml')->begin_resource('category', 'P2.WS.News.Category', '{name:[a-zA-Z-]+/[a-zA-Z]+}')->
get_for('{page_no:\d+}', 'index')->get_for('', 'index_rss', 'rss')->get_for('top', 'top_rss', 'rss')->get_for('most-popular', 'most_popular_rss', 'rss')->index()->
end->begin_resource('story', 'P2.WS.News.Story', 'stories/{id:\d+}')->
get_for('{page_no:\d+}', 'index')->index()->
end->begin_resource('index', 'P2.WS.News.Index')->
get_for('most-popular', 'most_popular_rss', 'rss')->get_for('', 'index_rss', 'rss')->index('html')->
end->end;
Àðõèòåêòóðà REST 31
![Page 32: Àðõèòåêòóðà REST · Àðõèòåêòóðà rest 30 Îïèñàíèå ðåñóðñîâ ïðèëîæåíèÿ Ïðèëîæåíèå ïîêàçûâàåò íîâîñòíûå ñòàòüè](https://reader031.vdocuments.site/reader031/viewer/2022021911/5c28b2ca09d3f2563e8c3ac5/html5/thumbnails/32.jpg)
Университет Текарт
Îïèñàíèå ïðèëîæåíèÿ
resource($name, $classname, $path)
$name èìÿ ðåñóðñà;
$classname èìÿ êëàññà, ðåàëèçóþùåãî ðåñóðñ;
$path ïóòü ê ðåñóðñó â âèäå øàáëîíà URL.
begin_resource('category',
'P2.WS.News.Category',
'{name:[a-zA-Z-]+/[a-zA-Z]+}');
Àðõèòåêòóðà REST 32
![Page 33: Àðõèòåêòóðà REST · Àðõèòåêòóðà rest 30 Îïèñàíèå ðåñóðñîâ ïðèëîæåíèÿ Ïðèëîæåíèå ïîêàçûâàåò íîâîñòíûå ñòàòüè](https://reader031.vdocuments.site/reader031/viewer/2022021911/5c28b2ca09d3f2563e8c3ac5/html5/thumbnails/33.jpg)
Университет Текарт
Øàáëîíû URL
Ðåãóëÿðíûå âûðàæåíèÿ ñ èìåíîâàííûìè ïàðàìåòðàìè:
stories/{id:\d+}
archive/{year:\d\d\d\d}/{month:\d\d?}/{day:\d\d?}
Çíà÷åíèÿ ïàðàìåòðîâ àâòîìàòè÷åñêè ïîäñòàâëÿþòñÿ ïðèâûçîâå ìåòîäîâ.
public function story($id);
public function archive_daily($year, $month, $day);
Àðõèòåêòóðà REST 33
![Page 34: Àðõèòåêòóðà REST · Àðõèòåêòóðà rest 30 Îïèñàíèå ðåñóðñîâ ïðèëîæåíèÿ Ïðèëîæåíèå ïîêàçûâàåò íîâîñòíûå ñòàòüè](https://reader031.vdocuments.site/reader031/viewer/2022021911/5c28b2ca09d3f2563e8c3ac5/html5/thumbnails/34.jpg)
Университет Текарт
Îïèñàíèå ìåòîäîâ ðåñóðñà
Ìåòîä ðåñóðñà âûïîëíÿåò îáðàáîòêó çàïðîñîâ ðàçëè÷íîãî âèäàè ôîðìèðóåò îòêëèê.
method($name, $http_mask, $path, $formats = 'html');
$name èìÿ ìåòîäà;
$http_mask GET | POST | PUT | DELETE;
$path URL-øàáëîí äëÿ ìåòîäà;
$formats ñïèñîê ôîðìàòîâ, ïîääåðæèâàåìûõ ìåòîäîì.
Àðõèòåêòóðà REST 34
![Page 35: Àðõèòåêòóðà REST · Àðõèòåêòóðà rest 30 Îïèñàíèå ðåñóðñîâ ïðèëîæåíèÿ Ïðèëîæåíèå ïîêàçûâàåò íîâîñòíûå ñòàòüè](https://reader031.vdocuments.site/reader031/viewer/2022021911/5c28b2ca09d3f2563e8c3ac5/html5/thumbnails/35.jpg)
Университет Текарт
Îïèñàíèå ìåòîäîâ ðåñóðñà: DSL
m = method($name, $http_mask, $path, $formats = 'html');
index($f= 'html') m('index', GET, 'index', $f)get($n, $f= 'html') m($n, GET, $n, $f)get_for($p, $n = '', $f = 'html') m($n, GET, $p, $f)post($n = '', $f = 'html') m($n ? $n : 'create', POST, $n ? $n : 'index', $f)post_for($p, $n = '', $f = 'html') m($n, POST, $p, $f)put($n = '', $f = 'html') m($n, $n ? $n : 'update', PUT, $n ? $n : 'index', $f)put_for($p, $n = '', $f = 'html') m($n, PUT, $p, $f)delete($n = '', $f = 'html') m($n ? $n : 'delete', DELETE, $n ? $n : 'index', $f)delete_for($p, $n = '', $f = 'html') m($n, DELETE, $p, $f)
Ìîæíî áîëåå ïîäðîáíî:
$resource->begin_method($name)->http($http)->path($path)->produces($fmt1, $fmt2')->end;
Èìåíà ïî óìîë÷àíèþ: index, create, update, delete.
Àðõèòåêòóðà REST 35
![Page 36: Àðõèòåêòóðà REST · Àðõèòåêòóðà rest 30 Îïèñàíèå ðåñóðñîâ ïðèëîæåíèÿ Ïðèëîæåíèå ïîêàçûâàåò íîâîñòíûå ñòàòüè](https://reader031.vdocuments.site/reader031/viewer/2022021911/5c28b2ca09d3f2563e8c3ac5/html5/thumbnails/36.jpg)
Университет Текарт
Ïàðàìåòðû âûçîâà ìåòîäîâ
Ìåòîä ìîæåò èìåòü ëþáîé íàáîð ïàðàìåòðîâ;
Åñëè èìÿ ïàðàìåòðà ñîâïàäàåò ñ èìåíåì ïàðàìåòðàøàáëîíà � ïîäñòàâëÿåòñÿ çíà÷åíèå ïàðàìåòðà;
Åñëè èìÿ ïàðàìåòðà âõîäèò â íàáîð ïðåäîïðåäåëåííûõèìåí � ïîäñòàâëÿåòñÿ ñîîòâåòñòâóþùåå çíà÷åíèå.
 ïðîòèâíîì ñëó÷àå ïîäñòàâëÿåòñÿ null.
Ïðåäîïðåäåëåííûå çíà÷åíèÿ:
env îêðóæåíèå (çàïðîñ + äàííûå, ñîçäàííûåïðåäûäóùèìè îáðàáîò÷èêàìè);
request http-çàïðîñ;
format ôîðìàò, äëÿ êîòîðîãî âûçâàí ìåòîä.
Àðõèòåêòóðà REST 36
![Page 37: Àðõèòåêòóðà REST · Àðõèòåêòóðà rest 30 Îïèñàíèå ðåñóðñîâ ïðèëîæåíèÿ Ïðèëîæåíèå ïîêàçûâàåò íîâîñòíûå ñòàòüè](https://reader031.vdocuments.site/reader031/viewer/2022021911/5c28b2ca09d3f2563e8c3ac5/html5/thumbnails/37.jpg)
Университет Текарт
Ôîðìàòû ïðåäñòàâëåíèé
Äëÿ êàæäîãî ìåòîäà ìîæíî óêàçàòü ñïèñîê ôîðìàòîâïðåäñòàâëåíèé.
Íà äàííûé ìîìåíò ðåàëèçîâàíî îïðåäåëåíèå ôîðìàòà ïîðàñøèðåíèþ çàïðàøèâàåìîãî äîêóìåíòà.
 ïðîöåññå ðåàëèçàöèè � îïðåäåëåíèå ïîHTTP-çàãîëîâêàì.
Íà êàæäûé ôîðìàò ìîæíî ïðåäóñìîòðåòü îòäåëüíûéìåòîä èëè îáðàáàòûâàòü âñå â îäíîì ìåòîäå, èñïîëüçóÿïàðàìåòð $format.
Ìîæíî îãðàíè÷èâàòü ôîðìàòû äëÿ öåëûõ ðåñóðñîâ.
get_for('most-popular', 'most_popular', 'html,rss');
Àðõèòåêòóðà REST 37
![Page 38: Àðõèòåêòóðà REST · Àðõèòåêòóðà rest 30 Îïèñàíèå ðåñóðñîâ ïðèëîæåíèÿ Ïðèëîæåíèå ïîêàçûâàåò íîâîñòíûå ñòàòüè](https://reader031.vdocuments.site/reader031/viewer/2022021911/5c28b2ca09d3f2563e8c3ac5/html5/thumbnails/38.jpg)
Университет Текарт
Ñóáëîêàòîðû
Ñîçäàíèå êëàññà, ñîîòâåòñòâóþùåãî âëîæåííîìó ðåñóðñó,ìîæåò áûòü âûïîëíåíî äèíàìè÷åñêè â ïðîöåññå îáðàáîòêè.
Ñóáëîêàòîð íå îáðàáàòûâàåò çàïðîñ;
Âìåñòî ýòîãî îí ïðèíèìàåò ðåøåíèå î ñîçäàíèèýêçåìïëÿðà êëàññà âëîæåííîãî ðåñóðñà;
Äëÿ ïîëó÷åííîãî ðåñóðñà çàíîâî âûïîëíÿåòñÿ ïðîöåññïîèñêà ìåòîäà îáðàáîòêè çàïðîñà.
sublocator($name, $path)
name èìÿ ìåòîäà-ñóáëîêàòîðà;
path øàáîí URL.
Àðõèòåêòóðà REST 38
![Page 39: Àðõèòåêòóðà REST · Àðõèòåêòóðà rest 30 Îïèñàíèå ðåñóðñîâ ïðèëîæåíèÿ Ïðèëîæåíèå ïîêàçûâàåò íîâîñòíûå ñòàòüè](https://reader031.vdocuments.site/reader031/viewer/2022021911/5c28b2ca09d3f2563e8c3ac5/html5/thumbnails/39.jpg)
Университет Текарт
Êàê âñå ýòî ðàáîòàåò
1 Îïðåäåëÿåì ôîðìàò (ðàñøèðåíèå èëè çàãîëîâîê);
2 Ïðîñìàòðèâàåì îïèñàíèÿ ðåñóðñîâ è ñîïîñòàâëÿåì ïóòü êàæäîãî ñ íà÷àëîì URL;
3 Åñëè íå íàøëè òàêîãî, ÷òî URL ñîîòâåòñòâóåò è ôîðìàò ïîääåðæèâàåòñÿ � îøèáêà;
4 Ðåñóðñ íàøëè, èùåì ìåòîä. Óáèðàåì èç URL ñîâïàâøóþ ñ ïóòåì ðåñóðñà ÷àñòü;
5 Ïðîñìîòðèâàåì âñå îïèñàíèÿ ìåòîäîâ ðåñóðñà, ñîïîñòàâëÿÿ øàáëîí ñ íà÷àëîì îñòàòêàURL;
6 Åñëè íåò íè http-ìåòîäà, íè ñóáëîêàòîðà, ïîäõîäÿùèõ ïî øàáëîíó URL, ôîðìàòó è ò.ä. �îøèáêà, ìåòîä íå ïîääåðæèâàåòñÿ.
7 Åñëè íàéäåí http-ìåòîä c ñîîòâåòñòâóþùèì øàáëîíîì URL, ôîðìàòîì è ìàñêîéHTTP-ìåòîäîâ � ñîçäàåì îáúåêòà êëàññà ðåñóðñà, ïîäñòàâëÿåì ïàðàìåòðû è âûçûâàåììåòîä. Ðåçóëüòàò ðàáîòû è åñòü ðåçóëüòàò âûïîëíåíèÿ. Ðàáîòà çàâåðøåíà.
8 Åñëè íàéäåí ñóáëîêàòîð ñ ñîîòâåòñòâóþùèì øàáëîíîì URL � ïîäñòàâëÿåì ïàðàìåòðû èâûçûâàåì ìåòîä.
9 Ðåçóëüòàò âûïîëíåíÿ ìåòîäà � íîâûé ðåñóðñ. Èùåì â ñïèñêå ðåñóðñîâ îïèñàíèå ðåñóðñàñîîòâåòñòâóþùåãî êëàññà.
10 Åñëè òàêîãî ðåñóðñà íåò � îøèáêà;
11 Óäàëÿåì ñîâïàâøóþ ñòðîêó èç íà÷àëà URL è âîçâðàùàåìñÿ â ïóíêò 4, è òàê äî òåõ ïîð,ïîêà íå íàéäåòñÿ http-ìåòîä.
Êîëè÷åñòâî ïðîõîäîâ îãðàíè÷åíî, /resource/ è /resource/index.html � ýêâèâàëåíòíû.
Àðõèòåêòóðà REST 39
![Page 40: Àðõèòåêòóðà REST · Àðõèòåêòóðà rest 30 Îïèñàíèå ðåñóðñîâ ïðèëîæåíèÿ Ïðèëîæåíèå ïîêàçûâàåò íîâîñòíûå ñòàòüè](https://reader031.vdocuments.site/reader031/viewer/2022021911/5c28b2ca09d3f2563e8c3ac5/html5/thumbnails/40.jpg)
Ðåàëèçàöèÿ
Âîïðîñû?
![Page 41: Àðõèòåêòóðà REST · Àðõèòåêòóðà rest 30 Îïèñàíèå ðåñóðñîâ ïðèëîæåíèÿ Ïðèëîæåíèå ïîêàçûâàåò íîâîñòíûå ñòàòüè](https://reader031.vdocuments.site/reader031/viewer/2022021911/5c28b2ca09d3f2563e8c3ac5/html5/thumbnails/41.jpg)
Университет Текарт
×òî ÷èòàòü
RESTful Web Services
Representational State Transfer
JAX RS
Discovering a World of Resources on Rails
REST Wiki
Restlet
REST è WS
REST search engine
Àðõèòåêòóðà REST 41
![Page 42: Àðõèòåêòóðà REST · Àðõèòåêòóðà rest 30 Îïèñàíèå ðåñóðñîâ ïðèëîæåíèÿ Ïðèëîæåíèå ïîêàçûâàåò íîâîñòíûå ñòàòüè](https://reader031.vdocuments.site/reader031/viewer/2022021911/5c28b2ca09d3f2563e8c3ac5/html5/thumbnails/42.jpg)
Ñïàñèáî çà âíèìàíèå
Университет Текарт