REST: Разлика между версии

от Уикипедия, свободната енциклопедия
Изтрито е съдържание Добавено е съдържание
без вътрешни препратки към друга Уикипедия
Ред 4: Ред 4:


== История ==
== История ==
Архитектурният стил на "REST" е разработен от [http://en.wikipedia.org/wiki/World_Wide_Web_Consortium W3C] Technical Architecture Group (TAG) едновременно с HTTP/1.1, базирано на съществуващият дизайн на HTTP/1.0. "[http://en.wikipedia.org/wiki/World_Wide_Web Word Wide Web]" представлява най - голямото осъществяване на архитектурния стил на REST.
Архитектурният стил на „REST“ е разработен от [[W3C]] Technical Architecture Group (TAG) едновременно с HTTP/1.1, базирано на съществуващият дизайн на HTTP/1.0. "[[Word Wide Web]]" представлява най – голямото осъществяване на архитектурния стил на REST.
REST - стилът обикновено се състои от [http://en.wikipedia.org/wiki/Client_(computing) клиенти] и [http://en.wikipedia.org/wiki/Server_(computing) сървъри]. Клиентите инициират заявки към сървърите; сървърите преработват заявките и връщат подходящи отговори. Заявките и отговорите са създадени през прехвърляне на образа на ресурси. [http://en.wikipedia.org/wiki/Web_resource Ресурсът] може да бъде всякаква ясна и смислена концепция, която може да бъде адресирана. [[:en:Representation_(systemics)|Представяне (анг. representation)]] на ресурс обикновено е документ, който намира сегашното възнамерявано състояние на ресурса.
REST – стилът обикновено се състои от [[клиент]]и и [[сървър]. Клиентите инициират заявки към сървърите; сървърите преработват заявките и връщат подходящи отговори. Заявките и отговорите са създадени през прехвърляне на образа на ресурси. Ресурсът може да бъде всякаква ясна и смислена концепция, която може да бъде адресирана. Представяне (анг. representation) на ресурс обикновено е документ, който намира сегашното възнамерявано състояние на ресурса.


Клиентът започва да изпраща заявки, когато е готов да направи преходът към ново състояние. Докато една или повече заявки са неизпълнени за клиента се смята, че е в преход. Представянето на всяко приложение се състои от линкове, които могат да бъдат използвани следващия път, когато клиентът избере да направи нови официални промени.
Клиентът започва да изпраща заявки, когато е готов да направи преходът към ново състояние. Докато една или повече заявки са неизпълнени за клиента се смята, че е в преход. Представянето на всяко приложение се състои от линкове, които могат да бъдат използвани следващия път, когато клиентът избере да направи нови официални промени.


== Условия ==
== Условия ==
Архитектурният стил на "REST" прилага шест ограничителни условия, като същевременно дава свобода за дизайна и имплементацията на индивидуалните компоненти:
Архитектурният стил на „REST“ прилага шест ограничителни условия, като същевременно дава свобода за дизайна и имплементацията на индивидуалните компоненти:
; [[Клиент-сървър]]
; [[Клиент-сървър]]
: Единният интерфейс разделя клиента и сървъра. Това означава, например, че клиента не се грижи за складирането на данни. Тази задача остава изцяло за сървъра, като по този начин се подобрява портативността на клиентския код (може да се използва в различни среди). Сървърът няма връзка с потребителския интерфейс и по този начин е по-семпъл и лесен за премащабиране. Клиентът и сървърът могат да бъдат заменяни или развивани независимо един от друг, стига това да не налага промяна на единния интерфейс помежду им.
: Единният интерфейс разделя клиента и сървъра. Това означава, например, че клиента не се грижи за складирането на данни. Тази задача остава изцяло за сървъра, като по този начин се подобрява портативността на клиентския код (може да се използва в различни среди). Сървърът няма връзка с потребителския интерфейс и по този начин е по-семпъл и лесен за премащабиране. Клиентът и сървърът могат да бъдат заменяни или развивани независимо един от друг, стига това да не налага промяна на единния интерфейс помежду им.
Ред 24: Ред 24:
: Единният интерфейс между клиента и сървъра разделя и опростява архитектурата. По този начин всеки компонент може да се развива самостоятелно.
: Единният интерфейс между клиента и сървъра разделя и опростява архитектурата. По този начин всеки компонент може да се развива самостоятелно.


Единственото условие на REST архитектурата, което не е задължително е "Код по поискване". Всяко приложение (услуга), изпълняващо на гореописаните условия, може да се нарече "RESTful". Ако нарушава дори едно от условията, то не може да бъде считано за "RESTful".
Единственото условие на REST архитектурата, което не е задължително е „Код по поискване“. Всяко приложение (услуга), изпълняващо на гореописаните условия, може да се нарече „RESTful“. Ако нарушава дори едно от условията, то не може да бъде считано за „RESTful“.


Всяка разпространена хипермедийна система, съответстваща на архитектурния стил на "REST" притежава нужната производителност, мащабируемост, опростеност, гъвкавост, видимост, портативност и надеждност.
Всяка разпространена хипермедийна система, съответстваща на архитектурния стил на „REST“ притежава нужната производителност, мащабируемост, опростеност, гъвкавост, видимост, портативност и надеждност.


== RESTful API ==
== RESTful API ==
RESTful уеб API (също наричано RESTful уеб service) е уеб приложение,което използва принципите на HTTP и REST. Представлява колекция от ресурси със четири дефинирани аспектa:
RESTful уеб API (също наричано RESTful уеб service) е уеб приложение, което използва принципите на HTTP и REST. Представлява колекция от ресурси със четири дефинирани аспекта:
* Основният "URL" за уеб приложенията като http://example.com/resources/
* Основният „URL“ за уеб приложенията като http://example.com/resources/
* [http://en.wikipedia.org/wiki/Internet_media_type Internet media] типът на данните поддържани от уеб приложенията. Това най-честo е [http://en.wikipedia.org/wiki/JSON JSON], но може да бъде всеки друг валиден Интернет медиен тип, като се има предвид, че е валиден хипертекст стандарт.
* [[Internet media]] типът на данните поддържани от уеб приложенията. Това най-често е [[JSON]], но може да бъде всеки друг валиден Интернет медиен тип, като се има предвид, че е валиден хипертекст стандарт.
* Операции поддържани от уеб приложението използвайки [http://en.wikipedia.org/wiki/Request_method HTTP методи] (примерно: GET, PUT, POST, или DELETE).
* Операции поддържани от уеб приложението използвайки [[HTTP методи]] (примерно: GET, PUT, POST, или DELETE).
* Приложенията трябва да се задвижват от хипертекст.
* Приложенията трябва да се задвижват от хипертекст.

Таблицата показва как HTTP методите обикновено се използват, за да се създаде уеб приложение.
Таблицата показва как HTTP методите обикновено се използват, за да се създаде уеб приложение.


{| class="wikitable"
{| class="wikitable"
|+ RESTful уеб API HTTP методи
|+ RESTful уеб API HTTP методи
! Ресурс !! GET !! PUT !! POST !! DELETE
! Ресурс !! GET !! PUT !! POST !! DELETE
|-
|-
! Collection URI, като <code><nowiki>http://example.com/resources</nowiki></code>
! Collection URI, като <code><nowiki>http://example.com/resources</nowiki></code>
Ред 52: Ред 53:
| '''Трие''' адресираният член на колекцията. Третира адресираният член като собствена колекция и прави нов вход за нея.
| '''Трие''' адресираният член на колекцията. Третира адресираният член като собствена колекция и прави нов вход за нея.
|}
|}
Методите PUT и DELETE са [http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Idempotent_methods_and_web_applications idempotent methods]. Методът GET е безопасен метод, което означава, че извикването му не причинява [http://en.wikipedia.org/wiki/Side_effect_(computer_science) странични ефекти].
Методите PUT и DELETE са Idempotent_methods_and_web_applications idempotent methods. Методът GET е безопасен метод, което означава, че извикването му не причинява странични ефекти.

За разлика от [http://en.wikipedia.org/wiki/SOAP SOAP] - базираните уеб услуги, няма "официален" стандарт за RESTful уеб API. Това е така, защото REST е архитектурен стил за разлика от SOAP, който е протокол. Въпреки, че REST не е стандарт, REST имплементация като Уеб може да използва стандарти като [http://en.wikipedia.org/wiki/HTTP HTTP], [http://en.wikipedia.org/wiki/URI URL], [http://en.wikipedia.org/wiki/XML XML] etc.
За разлика от [[SOAP]] – базираните уеб услуги, няма „официален“ стандарт за RESTful уеб API. Това е така, защото REST е архитектурен стил за разлика от SOAP, който е протокол. Въпреки, че REST не е стандарт, REST имплементация като Уеб може да използва стандарти като [[HTTP]], [[URL]], [[XML]], и др.


== Интерфейс ==
== Интерфейс ==
Единният интерфейс на REST се счита за основа на дизайна на всяка REST услуга.
Единният интерфейс на REST се счита за основа на дизайна на всяка REST услуга.


'''Идентификация на ресурсите'''
; Идентификация на ресурсите
:Отделните ресурси се разпознават по заявките (например използвайки [[http://en.wikipedia.org/wiki/Uniform_resource_identifier URIs]] в уеб-базирани REST системи). Самите ресурсите са отделни от изображението, което се изпраща на клиента. Например сървърът вместо да изпраща цялата база данни, изпраща [[HTML]], [[XML]] или [[JSON]], които представляват някакви записи в нея.
Отделните ресурси се разпознават по заявките (например използвайки [[URIs]] в уеб-базирани REST системи). Самите ресурсите са отделни от изображението, което се изпраща на клиента. Например сървърът вместо да изпраща цялата база данни, изпраща [[HTML]], [[XML]] или [[JSON]], които представляват някакви записи в нея.


'''Управление на ресурс чрез изображение'''
; Управление на ресурс чрез изображение
:Имайки изображение на ресурса, клиента има достатъчно информация,с която може да променя или трие ресурсите от сървъра, в случай че има разрешението да го направи.
Имайки изображение на ресурса, клиента има достатъчно информация, с която може да променя или трие ресурсите от сървъра, в случай че има разрешението да го направи.


'''Самоописващи съобщения'''
; Самоописващи съобщения
:Всяко съобщение включва информация, която описва как да се обработи съобщението.
Всяко съобщение включва информация, която описва как да се обработи съобщението.


'''HATEOAS (Hypermedia as the Engine of Application State)'''
;HATEOAS (Hypermedia as the Engine of Application State)
:[[http://en.wikipedia.org/wiki/HATEOAS HATEOAS]] е ограничението, което отличава архитектурата на REST приложението от повечето архитектури на мрежови приложения. При нея клиента „общува“ с приложението изцяло чрез [[http://en.wikipedia.org/wiki/Hypermedia hypermedia]], получена динамично от сървърa.
[[HATEOAS]] е ограничението, което отличава архитектурата на REST приложението от повечето архитектури на мрежови приложения. При нея клиента „общува“ с приложението изцяло чрез [[hypermedia]], получена динамично от сървъра.


== Примери за Rest ==
== Примери за Rest ==
Rest може да бъде намерен в много места на публичния уеб.
Rest може да бъде намерен в много места на публичния уеб.
* [http://en.wikipedia.org/wiki/Atom_(standard) Atom Publishing Protocol] за публикуване към блогове се смята за канонически [http://tools.ietf.org/html/rfc5023 RESTful протокол].
* [[Atom Publishing Protocol]] за публикуване към блогове се смята за канонически протокол. <ref>[http://tools.ietf.org/html/rfc5023 RESTful]</ref>
* [http://en.wikipedia.org/wiki/Sun_Microsystems Sun Microsystems]' [https://kenai.com/projects/suncloudapis/pages/Home Cloud API] е добър пример за документация, тип медия.
* [[Sun Microsystems]] <ref>[https://kenai.com/projects/suncloudapis/pages/Home Cloud API]</ref> е добър пример за документация, тип медия.
* Инициативата [http://open-services.net/html/Home.html Open Services for Lifecycle Collaboration (OSLC)]създава RESTful подход към обединяване на софтуерни продукти.
* Инициативата Open Services for Lifecycle Collaboration (OSLC) <ref>[http://open-services.net/html/Home.html Open Services for Lifecycle Collaboration (OSLC)]</ref> създава RESTful подход към обединяване на софтуерни продукти.
* [http://en.wikipedia.org/wiki/CouchDB CouchDB] е документно ориентирана база данни написана в [http://en.wikipedia.org/wiki/Erlang_(programming_language) Erlang], която предоставя RESTful JSON API, който може да достъпен от всяка среда, която поддържа HTTP молби.
* [[CouchDB]] е документно ориентирана база данни написана в [http://en.wikipedia.org/wiki/Erlang_(programming_language) Erlang], която предоставя RESTful JSON API, който може да достъпен от всяка среда, която поддържа HTTP молби.
* [http://en.wikipedia.org/wiki/MySQL_Cluster MySQL Cluster] база данни достижима през прост [https://code.google.com/p/mod-ndb/ REST/JSON] интерфейс като Apache модул.
* [[MySQL Cluster]] база данни достижима през прост REST/JSON <ref>[https://code.google.com/p/mod-ndb/ REST/JSON]</ref> интерфейс като Apache модул.
* [http://code.msdn.microsoft.com/cannonicalRESTEntity Canonical REST Entity Service] на [http://en.wikipedia.org/wiki/Microsoft Microsoft].
* Canonical REST Entity Service на [[Microsoft]].<ref>[http://code.msdn.microsoft.com/cannonicalRESTEntity Canonical REST Entity Service]</ref>
* [http://en.wikipedia.org/wiki/Nuxeo Nuxeo], open sourse документ мениджър, създава Content Automation интерфейс чрез [https://doc.nuxeo.com/display/NXDOC/REST+API REST API].
* [[Nuxeo]], open sourse документ мениджър, създава Content Automation интерфейс чрез REST API<ref>[https://doc.nuxeo.com/display/NXDOC/REST+API REST API]</ref>.
* [http://en.wikipedia.org/wiki/Restful_Objects Restful Objects], публична спецификация за общ RESTful API за всеки домейн обект модел.
* [[Restful Objects]], публична спецификация за общ RESTful API за всеки домейн обект модел.
* [http://en.wikipedia.org/wiki/Sones_GraphDB Sones GraphDB] е графа - ориентирана база данни написана на C#, която предоставя RESTful интерфейс.
* [[Sones GraphDB]] е графа – ориентирана база данни написана на C#, която предоставя RESTful интерфейс.
* Поддръжката на Google Fusion Tables включва [https://developers.google.com/fusiontables/ RESTful API]
* Поддръжката на Google Fusion Tables включва RESTful API.<ref>[https://developers.google.com/fusiontables/ RESTful API]</ref>


== Вижте също ==
== Вижте също ==
* [http://en.wikipedia.org/wiki/RSDL RSDL] (RESTful Service Description Language)
* [http://en.wikipedia.org/wiki/Clean_URL Clean URLs]
* [http://en.wikipedia.org/wiki/Create,_read,_update_and_delete Create, read, update and delete] (CRUD)
* [http://en.wikipedia.org/wiki/Resource-oriented_architecture Resource-oriented architecture] (ROA)
* [http://en.wikipedia.org/wiki/Service-oriented_architecture Service-oriented architecture] (SOA)
* [http://en.wikipedia.org/wiki/Resource-oriented_computing Resource-oriented computing] (ROC)
* [[HTTP]]
* [[HTTP]]
* [[уеб приложение]]
* [[уеб приложение]]
Ред 96: Ред 92:
== Източници ==
== Източници ==
<references />
<references />

http://rest.elkstein.org/2008/02/what-is-rest.html
== Външни препратки ==
http://www.techopedia.com/definition/1312/representational-state-transfer-rest
* http://rest.elkstein.org/2008/02/what-is-rest.html
* http://www.techopedia.com/definition/1312/representational-state-transfer-rest


[[Категория:Интернет протоколи]]
[[Категория:Интернет протоколи]]

Версия от 19:42, 19 юли 2017

Услугата REST (Шаблон:Lang-en) представлява разпределителна системна рамка, базирана на уеб протоколи и технологии. Архитектурният модел REST включва взаимодействията между сървър и клиент, осъществени по време на трансфера на данни. Уеб е най-мащабната имплементация на REST.

История

Архитектурният стил на „REST“ е разработен от W3C Technical Architecture Group (TAG) едновременно с HTTP/1.1, базирано на съществуващият дизайн на HTTP/1.0. "Word Wide Web" представлява най – голямото осъществяване на архитектурния стил на REST. REST – стилът обикновено се състои от клиенти и сървъри. Клиентите инициират заявки към сървърите; сървърите преработват заявките и връщат подходящи отговори. Заявките и отговорите са създадени през прехвърляне на образа на ресурси. Ресурсът може да бъде всякаква ясна и смислена концепция, която може да бъде адресирана. Представяне (анг. representation) на ресурс обикновено е документ, който намира сегашното възнамерявано състояние на ресурса.

Клиентът започва да изпраща заявки, когато е готов да направи преходът към ново състояние. Докато една или повече заявки са неизпълнени за клиента се смята, че е в преход. Представянето на всяко приложение се състои от линкове, които могат да бъдат използвани следващия път, когато клиентът избере да направи нови официални промени.

Условия

Архитектурният стил на „REST“ прилага шест ограничителни условия, като същевременно дава свобода за дизайна и имплементацията на индивидуалните компоненти:

Клиент-сървър
Единният интерфейс разделя клиента и сървъра. Това означава, например, че клиента не се грижи за складирането на данни. Тази задача остава изцяло за сървъра, като по този начин се подобрява портативността на клиентския код (може да се използва в различни среди). Сървърът няма връзка с потребителския интерфейс и по този начин е по-семпъл и лесен за премащабиране. Клиентът и сървърът могат да бъдат заменяни или развивани независимо един от друг, стига това да не налага промяна на единния интерфейс помежду им.
Без статус на сесията (Шаблон:Lang-en)
Следващото условие е на сървъра да не се запазват статуси на сесиите. Всяка заявка от клиента, съдържа в себе си нужната информация за нейната обработка, статуси на сесии се запазват единствено при клиента.
Кеширане
Клиентът има право да кешира (запазва) информация, получена в отговор от сървъра, за да я преизползва при последващи заявки. За тази цел сървърът трябва имплицитно или експлицитно да е посочил дали информацията в отговора може да се кешира, за да се избегнат случаи, в които клиентът получава грешна информация при бъдещи заявки. При правилно управление и използване на кеширането могат частично или напълно да се елиминират ненужни взаимодействия между клиента и сървъра, като по този начин се подобрява бързината и производителността.
Многослойна система
Обикновено клиентът не знае дали е свързан с крайния сървър или със сървър-посредник. Сървърите-посредници подобряват ефективността, като увеличават капацитета за обработване на заявки и предоставят споделени кешове. Също така те допринасят да подобряването на сигурността.
Код при поискване (незадължително)
Сървърът може временно да разшири функционалността, изпращайки код, който се изпълнява директно при клиента. Например клиентски скриптове, написани на JavaScript или компилирани компоненти като Java applets.
Единен интерфейс
Единният интерфейс между клиента и сървъра разделя и опростява архитектурата. По този начин всеки компонент може да се развива самостоятелно.

Единственото условие на REST архитектурата, което не е задължително е „Код по поискване“. Всяко приложение (услуга), изпълняващо на гореописаните условия, може да се нарече „RESTful“. Ако нарушава дори едно от условията, то не може да бъде считано за „RESTful“.

Всяка разпространена хипермедийна система, съответстваща на архитектурния стил на „REST“ притежава нужната производителност, мащабируемост, опростеност, гъвкавост, видимост, портативност и надеждност.

RESTful API

RESTful уеб API (също наричано RESTful уеб service) е уеб приложение, което използва принципите на HTTP и REST. Представлява колекция от ресурси със четири дефинирани аспекта:

  • Основният „URL“ за уеб приложенията като http://example.com/resources/
  • Internet media типът на данните поддържани от уеб приложенията. Това най-често е JSON, но може да бъде всеки друг валиден Интернет медиен тип, като се има предвид, че е валиден хипертекст стандарт.
  • Операции поддържани от уеб приложението използвайки HTTP методи (примерно: GET, PUT, POST, или DELETE).
  • Приложенията трябва да се задвижват от хипертекст.

Таблицата показва как HTTP методите обикновено се използват, за да се създаде уеб приложение.

RESTful уеб API HTTP методи
Ресурс GET PUT POST DELETE
Collection URI, като http://example.com/resources Подрежда URL адресите и някои други детайли на членовете на колекцията. Заменя цялата колекция с друга колекция. Създава нов вход в колекцията. URL адресът на новия вход е определен автоматично и обикновено се връща от операцията. Трие цялата колекция.
Element URI, като http://example.com/resources/item17 Връща представяне на адресирания член на колекцията, изразена във подходящ Интернет медия тип. Заменя адресирания член на колекцията или ако не съществува го създава. Обикновено не се използва. Трие адресираният член на колекцията. Третира адресираният член като собствена колекция и прави нов вход за нея.

Методите PUT и DELETE са Idempotent_methods_and_web_applications idempotent methods. Методът GET е безопасен метод, което означава, че извикването му не причинява странични ефекти.

За разлика от SOAP – базираните уеб услуги, няма „официален“ стандарт за RESTful уеб API. Това е така, защото REST е архитектурен стил за разлика от SOAP, който е протокол. Въпреки, че REST не е стандарт, REST имплементация като Уеб може да използва стандарти като HTTP, URL, XML, и др.

Интерфейс

Единният интерфейс на REST се счита за основа на дизайна на всяка REST услуга.

Идентификация на ресурсите

Отделните ресурси се разпознават по заявките (например използвайки URIs в уеб-базирани REST системи). Самите ресурсите са отделни от изображението, което се изпраща на клиента. Например сървърът вместо да изпраща цялата база данни, изпраща HTML, XML или JSON, които представляват някакви записи в нея.

Управление на ресурс чрез изображение

Имайки изображение на ресурса, клиента има достатъчно информация, с която може да променя или трие ресурсите от сървъра, в случай че има разрешението да го направи.

Самоописващи съобщения

Всяко съобщение включва информация, която описва как да се обработи съобщението.

HATEOAS (Hypermedia as the Engine of Application State)

HATEOAS е ограничението, което отличава архитектурата на REST приложението от повечето архитектури на мрежови приложения. При нея клиента „общува“ с приложението изцяло чрез hypermedia, получена динамично от сървъра.

Примери за Rest

Rest може да бъде намерен в много места на публичния уеб.

  • Atom Publishing Protocol за публикуване към блогове се смята за канонически протокол. [1]
  • Sun Microsystems [2] е добър пример за документация, тип медия.
  • Инициативата Open Services for Lifecycle Collaboration (OSLC) [3] създава RESTful подход към обединяване на софтуерни продукти.
  • CouchDB е документно ориентирана база данни написана в Erlang, която предоставя RESTful JSON API, който може да достъпен от всяка среда, която поддържа HTTP молби.
  • MySQL Cluster база данни достижима през прост REST/JSON [4] интерфейс като Apache модул.
  • Canonical REST Entity Service на Microsoft.[5]
  • Nuxeo, open sourse документ мениджър, създава Content Automation интерфейс чрез REST API[6].
  • Restful Objects, публична спецификация за общ RESTful API за всеки домейн обект модел.
  • Sones GraphDB е графа – ориентирана база данни написана на C#, която предоставя RESTful интерфейс.
  • Поддръжката на Google Fusion Tables включва RESTful API.[7]

Вижте също

Източници

Външни препратки