Що таке REST? Трохи розгублений [закрито]


155

Я був припущений, що REST - це веб-сервіс, але, здається, я неправильно вважаю це - так, що таке REST?

Я читав у Вікіпедії, але все ще не можу обернути голову навколо цього. Чому багато місць називають API API REST API?


21
@John Saunders: Як це можливий дублікат? Інший хлопець, мабуть, знає, що таке REST, тоді як Натан, з іншого боку, розгублений.
Підроблений код Мавпи Рашид

Я відчував, що інший відповість на його запитання. Якщо ніхто інший не погодиться, то закриття голосування закінчиться. У нас є близько десяти відповідей на це питання. Просто натисніть тег "відпочинок", і ви побачите їх усі.
Джон Сондерс

1
REST - це набір правил для створення веб-сервісів. Якщо API побудований за цими правилами, це API REST. Як я пояснив REST своїй гумовій качці, пояснює деякі з цих правил неофіційно.
Користувач42

Відповіді:


127

REST - це не конкретна веб-служба, а концепція дизайну (архітектура) для управління державною інформацією. Навчальний документ про це - дисертація Роя Томаса Філдінга (2000) "Архітектурні стилі та дизайн мережевих програмних архітектур" ( доступна в Інтернеті від Каліфорнійського університету, Ірвайн).

Вперше прочитав пост Райана Томайко Як я пояснив REST дружині ; це відмінна відправна точка. Потім прочитайте фактичну дисертацію Філдінга. Це не так вже й просунуто, а також не довго (шість глав, 180 сторінок)! (Я знаю, ви, діти, в школі люблять це коротко).

EDIT: Я вважаю, що безглуздо намагатися пояснити REST. У ньому є стільки таких понять, як масштабованість, наочність (без громадянства) тощо, що читачеві потрібно зрозуміти, а найкращим джерелом для їх розуміння є власне дисертація. Це набагато більше, ніж POST / GET і т.д.


@Nathan, Повір мені, у мене була така ж проблема, як у тебе раніше. Прочитайте тезу, можливо, перейдіть її кілька разів повільно, але ви зрозумієте концепцію, насправді це зовсім не важко. Люди просто схильні пояснювати це погано.
Андерс

Коли розробники намагаються використовувати REST і намагаються це робити лише за своїм кодом (не плануючи всю систему, маючи на увазі REST), настає пекло :-)
karatedog

@Anders, враховуючи, що REST - це те, що це таке, як можна порівняти REST з веб-сервісами?
В’язень


1
можливо, цього розділу буде достатньо замість того, щоб прочитати цілу дисертацію: ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm
andilabs

74

REST - це модель дизайну програмного забезпечення, яка зазвичай використовується для веб-додатків. З точки зору мирян, це означає, що це загальновживана ідея, яка використовується у багатьох різних проектах. Він розшифровується як представницький державний трансфер . Основна ідея REST - це обробляти об'єкти на стороні сервера (як рядки в таблиці бази даних) як ресурси, ніж їх можна створити або знищити.

Найбільш основний спосіб мислення про REST - це спосіб форматування URL-адрес ваших веб-додатків. Наприклад, якщо ваш ресурс називався "повідомленнями", то:

/posts Як користувач отримав би доступ до ВСІХ публікацій для їх відображення.

/posts/:id Як користувач отримав би доступ та переглянув окрему публікацію, отриману на основі свого унікального ідентифікатора.

/posts/new Як би ви відображали форму для створення нової публікації.

Надіслати запит на POST /usersбуде таким чином, як ви насправді створили б новий пост на рівні бази даних.

Надіслати запит PUT до /users/:idтого, як ви оновите атрибути даної публікації, знову ж таки ідентифіковані унікальним ідентифікатором.

Надіслати DELETE-запит /users/:idбуде таким чином, як ви видалите дану публікацію, знову визначену унікальним ідентифікатором.

Як я розумію, модель REST в основному популяризувалася (для веб-додатків) рамкою Ruby on Rails, яка робить великий акцент на маршрутах RESTful. Я можу помилитися з цього приводу.

Я, можливо, не найбільш кваліфікований, щоб про це говорити, але саме так я це дізнався (спеціально для розвитку Rails).

Коли хтось посилається на "REST api", загалом те, що вони означають, є api, який використовує RESTful URL-адреси для отримання даних.


2
Вам пощастило, адже Rails побудований на принципах REST і якщо ви використовуєте інструменти Rails, ваш код буде RESTful. Однак є кодери, які не розуміють джек про REST, вони кодують те, що хочуть, і в кінці кінців використовують це "форматування URL-адрес", оскільки це модно.
karatedog

8
де колись / користувачі використовувались у цій відповіді, чи не слід це / повідомлення?
Mayuresh Srivastava

@MayureshSrivastava Зауважте, що приклади PUT мають: id та приклад POST не мають: id. Google для решти історії. (POST: небезпечний, не ідентичний; PUT: незахищений, idempotent)
Ajeet Ganga

38

RESTє архітектурним стилем та дизайном для мережевих програмних архітектур.

RESTПоняття називають ресурсами. Представлення ресурсу повинно бути без громадянства. Він представлений через певний тип носія. Деякі приклади типів носіїв включають в себе XML, JSONі RDF. Ресурсами маніпулюють компоненти. Компоненти запитують та маніпулюють ресурсами через стандартний єдиний інтерфейс. У разі HTTP, цей інтерфейс складається з стандартної HTTP опса наприклад GET, PUT, POST, DELETE.

RESTЗазвичай використовується в HTTPосновному через простоту HTTP та його дуже природне відображення на принципи RESTful. Однак REST не прив’язаний до жодного конкретного протоколу.

Основні принципи REST

Зв'язок клієнт-сервер

Архітектура клієнт-сервер має дуже чітке розділення проблем. Усі програми, побудовані у стилі RESTful, також повинні бути принципово клієнт-сервер.

Без громадянства

Кожен запит клієнта до сервера вимагає повного представлення його стану. Сервер повинен бути в змозі повністю зрозуміти запит клієнта без використання будь-якого контексту сервера або стану сеансу сервера. Звідси випливає, що весь стан повинен зберігатися у клієнта. Ми розглянемо представництво без громадянства детальніше пізніше.

Кешований

Обмеження кеш-пам'яті можуть бути використані, таким чином дозволяючи позначати дані відповіді як кешовані або не кешовані. Будь-які дані, позначені як кешовані, можуть бути повторно використані як відповідь на той же наступний запит.

Уніфікований інтерфейс

Усі компоненти повинні взаємодіяти через єдиний єдиний інтерфейс. Оскільки взаємодія всіх компонентів відбувається через цей інтерфейс, взаємодія з різними службами дуже проста. Інтерфейс той самий! Це також означає, що зміни в реалізації можуть бути здійснені поодиноко. Такі зміни не вплинуть на взаємодію основних компонентів, оскільки єдиний інтерфейс завжди не змінюється. Одним недоліком є ​​те, що ви застрягли в інтерфейсі. Якщо оптимізація може бути надана певній службі шляхом зміни інтерфейсу, вам не пощастило, оскільки REST забороняє це. З іншого боку, REST оптимізовано для Інтернету, отже, неймовірна популярність REST через HTTP!

Вищезазначені поняття представляють визначальні характеристики REST та відрізняють архітектуру REST від інших архітектур, таких як веб-сервіси. Корисно зауважити, що послуга REST - це веб-служба, але веб-служба не обов'язково є послугою REST.

Дивіться цю публікацію в блозі про принципи дизайну REST для отримання більш детальної інформації про REST та вищезазначені принципи.


15

Це означає «Представницький державний трансфер», і це може означати багато чого, але зазвичай, коли ви говорите про API та додатки, ви говорите про REST як про спосіб робити веб-сервіси або отримувати програми для спілкування через Інтернет.

REST - це в основному спосіб спілкування між системами і робить багато з того, що було розроблено для SOAP RPC, але, хоча SOAP, як правило, здійснює з'єднання, аутентифікується, а потім виконує роботу над цим з'єднанням, REST працює майже так само, як і в Інтернеті . У вас є URL-адреса, і коли ви запитуєте цю URL-адресу, ви отримуєте щось назад. Тут дещо стає заплутаним, оскільки люди описують Інтернет як найбільший додаток REST, і хоча це технічно правильно, воно насправді не допомагає пояснити, що це таке.

Коротше кажучи, REST дозволяє вам отримати два програми, що розмовляють через Інтернет, використовуючи інструменти, подібні до того, який використовує веб-браузер. Це набагато простіше, ніж SOAP, і багато з того, що робить REST, говорить: "Ей, речі не повинні бути такими складними".

Варто прочитати:


REST - це архітектура, заснована на обмеженнях, SOAP - це протокол, це абсолютно різні речі. Мені не подобається, коли люди говорять про SOAP і REST в одній концепції, тому недарма люди плутаються з цього приводу.
Андерс

@Anders - Він сказав, що дивиться API REST і думає, що це спосіб використовувати веб-сервіси. Ви можете використовувати REST так, і в цій якості він виконує більшу частину того, що робить SOAP. Можна також говорити про Інтернет як про найбільшу в світі програму RESTful, але це насправді не пояснює, для чого ви використовували б API REST.
Марк

Це насправді була моєю основною проблемою, бачачи REST та SOAP в одній і тій же концепції. Здається, API просто RESTful у дизайні.
В’язень

4

http://en.wikipedia.org/wiki/Representational_State_Transfer

Основна ідея полягає в тому, що замість постійного з'єднання з сервером ви робите запит, отримуєте деякі дані, показуєте це користувачеві, але, можливо, не все це, і тоді, коли користувач робить щось, що вимагає отримати більше даних, або щоб передати деяку частину до сервера, клієнт ініціює зміну до нового стану.


3
Можливо, це лише я, але мені подобається бачити відповідну відповідь на stackoverflow разом із відповідним цитуванням. Просто з гумором мені, і припустимо, що вікіпедія пішла на пуф. Яку користь приносить вашому посиланню гмм? :)
Підроблений код Мавпи Рашид

1
@Hack Saw: Чи не повинно це бути у вашій відповіді?
Підроблений код Мавпи Рашид

Я щойно помітив функцію редагування. :)
Hack Saw

1
@karatedog: REST можна досягти за допомогою HTTP, але це можна зробити за допомогою різних методів передачі даних.
Hack Saw

1
Це протокол HTTP, про який ви пишете, REST - це архітектура.
karatedog
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.