Сравнивая структуру REST [api] с OO-моделью, я вижу следующие сходства:
Обе:
Ориентированы на данные
- 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 } }] }
Возвращаясь к ОО, шаблон проектирования фасада соблюдает отношение Low Coupling
между объектом A и его « клиентом objectB » и 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 обновляет фрагменты). Просто убедитесь, что вы не обновляете адрес, когда не требуется никаких изменений (по соображениям производительности).