Порівнюючи структуру REST [api] з моделлю ОО, я бачу такі схожість:
Обидва:
Орієнтовані на дані
- REST = Ресурси
- ОО = об’єкти
Об'ємна робота навколо даних
- REST = оточувати VERBS (Get, Post, ...) навколо ресурсів
- OO = сприяти роботі навколо об'єктів шляхом інкапсуляції
Однак, хороші практики OO не завжди стоять на REST apis, наприклад, при спробі застосувати шаблон фасаду, наприклад: у REST у вас немає 1 контролера для обробки всіх запитів І ви не приховуєте внутрішню складність об'єкта.
Навпаки, REST сприяє публікації ресурсів усіх відносин з ресурсом та інших принаймні у двох формах:
через ієрархію відносин ресурсів (Контакт ідентифікатора 43 складається з адреси 453):
/api/contacts/43/addresses/453
через посилання у відповіді REST json:
>> GET /api/contacts/43 << HTTP Response { id: 43, ... addresses: [{ id: 453, ... }], links: [{ favoriteAddress: { id: 453 } }] }
Повертаючись до OO, схема дизайну фасаду відповідає Low Coupling
між об'єктомA та його " клієнтомBB об'єкта ", а також High Cohesion
щодо цього об'єктаA та його внутрішньої композиції об'єкта ( objectC , objectD ). З Objecta інтерфейс, це дозволяє розробнику , щоб обмежити вплив на objectB з Objecta внутрішніх змін (в objectC і objectD ), до тих пір , як Objecta API (операцій) по - , як і раніше дотримується.
У REST дані (ресурс), відносини (посилання) та поведінка (дієслова) вибухають у різних елементах і доступні в Інтернеті.
Граючи з REST, я завжди впливаю на зміни коду між моїм клієнтом та сервером: Тому що я маю High Coupling
між моїми Backbone.js
запитами та Low Cohesion
між ресурсами.
Я ніколи не зрозумів, як дати свою Backbone.js javascript application
угоду з « REST ресурсів і особливості » відкриття сприяло REST зв'язків. Я розумію, що WWW призначений для обслуговування декількох серверів, і що елементи OO повинні були підірватись, щоб їх обслуговувало багато хостів, але для простого сценарію, наприклад "збереження" сторінки, що показує контакт з її адресами, Я закінчую:
GET /api/contacts/43?embed=(addresses) [save button pressed] PUT /api/contacts/43 PUT /api/contacts/43/addresses/453
що приводить мене до переміщення атомної трансакційної відповідальності за збереження дії на додатках браузерів (оскільки два ресурси можна вирішувати окремо).
Зважаючи на це, якщо я не можу спростити свою розробку (шаблони дизайну фасаду не застосовуються) і якщо я принесу більшу складність для свого клієнта (обробка транзакційного атомного збереження), де користь бути RESTful?
PUT /api/contacts/43
каскадом оновлень внутрішніх об'єктів? У мене було багато таких інтерфейсів API (головна URL-адреса читає / створює / оновлює "ціле", а додаткові URL-адреси оновлюють шматки). Просто переконайтеся, що ви не оновлюєте адресу, коли не потрібні зміни (з міркувань продуктивності).