У мові REST яка різниця між ресурсом та представництвом?


9

Я розумію REST, що дозволяє моделювати сервісні операції як подання стану та переходу з одного стану в інший, використовуючи HTTP. До недавнього часу я завжди розумів ресурси як уявлення про службовий стан, коли читав цю статтю Джиммі Богара, якого я знаю як розумний розробник / архітектор, якого поважає громада. Процитувати конкретну заяву з цього допису

Представлення дещо інше - воно описує поточний стан ресурсу (за запитом).

Це мене розгубило. Яка загальновизнана думка з цієї теми?


1
Можливо, ви захочете перевірити: Про які теми я можу запитати тут? . Опитування громадської думки не є темою для Programmers.SE.
Адам Цукерман

2
Ну, все, що перераховано на цій сторінці, не має чорно-білої відповіді, але всі думки. Також я не впевнений, як це питання стосується думки. Це лише тому, що я у своєму питанні використав слово "думка"?
Сухас

В першу чергу, так. На жаль (або, можливо, на щастя), слова "думка", "найкраща практика" тощо - сильно пов'язані з "порожньою резонансною порожниною, де має бути мозок", оскільки більшість людей, які використовують такі терміни, просто хочуть помітити стадо. вдалині і йдіть за нею. Люди, які шукають визначення слів, часто є найгіршими правопорушниками. Яку конкретну проблему ви намагаєтеся вирішити?
Роберт Харві

1
Що стосується вашого запитання, ресурс - це просто "щось із Інтернету з адресою", а представлення - це "спосіб репрезентації речі в Інтернеті". Це може бути файл, веб-сторінка або документ JSON. Це може бути певний тип файлів, наприклад документ Word або електронна таблиця. У всіх цих випадках представлення - це те, що ви шукаєте. "Поточний стан ресурсу" - це визнання, що річ, можливо, змінилася з моменту останнього вилучення.
Роберт Харві

Відповіді:


14

Коротка відповідь

Карта - це не територія.

Довший відповідь - як ні з чим REST, місце , щоб почати з Рой Філдінг дисертації ; зокрема, глава 5 . Для вашого поточного запитання ви хочете розділ 5.2.1.

REST визначається чотирма обмеженнями інтерфейсу: ідентифікація ресурсів; маніпулювання ресурсами через представництва; повідомлення з самоописанням; і, гіпермедіа як двигун стану застосування.

Ресурс

Ключовою абстракцією інформації в REST є ресурс. Будь-яка інформація, яку можна назвати, може бути ресурсом: документом або зображенням, тимчасовою службою (наприклад, "сьогоднішня погода в Лос-Анджелесі"), колекцією інших ресурсів, невіртуальним об'єктом (наприклад, людиною) тощо . Іншими словами, будь-яка концепція, яка може бути об'єктом авторського гіпертекстового посилання, повинна відповідати визначенню ресурсу. Ресурс - це концептуальне відображення сукупності сутностей, а не сутність, яка відповідає відображенню в будь-який конкретний момент часу.

Представництво

Компоненти REST виконують дії на ресурсі, використовуючи подання для фіксації поточного або передбачуваного стану цього ресурсу та передачі цього представлення між компонентами. Представлення - це послідовність байтів, плюс метадані представлення для опису цих байтів. Інші часто використовувані, але менш точні імена для представлення включають: документ, файл та суть повідомлення HTTP, екземпляр або варіант.

Представлення складається з даних, метаданих, що описують дані, а іноді і метаданих для опису метаданих (як правило, з метою перевірки цілісності повідомлення).

Отже: "сьогоднішня погода в Лос-Анджелесі" - це ресурс. Представлення кандидатів міститиме: текстовий документ із останнім прогнозом національної служби погоди; візуальне зображення радіолокатора погоди та аудіозапис прогнозу.


2

Ресурс - це те, з чим ви працюєте. Наприклад, якщо у вас є API для перемикання певної лампи, то ресурсом є сама лампа. Ресурс може бути фізичним (наприклад, лампа, особа) або нефізичним (наприклад, стаття, роль, рядок у базі даних), ресурс може бути первинним (наприклад, баланс) або похідним (наприклад, транзакція). Ресурс може посилатися на певну сутність (наприклад, п'яту лампу, встановлену в цій розетці лампи), або він може посилатися на роль, яка відображає різні об'єкти в різний час (наприклад, поточно встановлена ​​лампа, лампа, встановлена ​​5 серпня 2008 р.) або він може зіставляти декілька об'єктів (наприклад, усі світильники будинку).

Представлення ресурсу - це спосіб, яким ваша служба повідомляє стан ресурсу, наприклад, XML, JSON, який представляє стан лампи.

У API REST API ідентифікується за допомогою єдиного ідентифікатора (наприклад, URI). Один ресурс може мати кілька представлень, в HTTP REST API ви зазвичай вказуєте представлення, яке ви хочете використовувати в заголовках типу HTTP-вмісту та Прийняти.

Однією з ключових реалізацій в архітектурі сервера клієнтів є те, що ви не можете донести ресурс до клієнта, і ви не повинні намагатися зробити його таким, як ви. Натомість в API REST ви віддалено маніпулюєте ресурсом, передаючи представлення ресурсу. Подумайте про це так: ви не FedEx лампою, щоб клієнт міг маніпулювати лампою безпосередньо, а скоріше сервіс створив XML / JSON / protobuf / CSV подання лампи, а клієнт надіслав представлення призначених маніпуляцій. Потім служба маніпулює фактичним станом лампи від імені клієнта або відхиляє запит, скажімо, якщо клієнт не уповноважений виконувати операції з лампою. Це може здатися очевидним / роздвоєним волоссям, але важливо зазначити, що оскільки представництво не є самим ресурсом,


1

Ресурсом може бути рахунок-фактура.

Представлення - це рахунок-фактура в певний момент часу у форматі JSON або у форматі XML. Ви можете отримати той самий рахунок-фактура пізніше, це буде той самий ресурс, але в потенційно іншому стані (скасовано, оплачено тощо).

Ви берете поточний стан рахунку-фактури (наприклад: всі дані рахунків-фактур у базі даних) і надаєте йому конкретне представлення (наприклад: html, xml, json) у певний момент часу для передачі на якийсь інший пристрій (наприклад: браузер)

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