Разве ресурсно-ориентированный не является действительно объектно-ориентированным? - PullRequest
5 голосов
/ 30 сентября 2008

Когда вы думаете об этом, разве парадигма REST того, чтобы быть ресурс-ориентированной, не сводится к объектно-ориентированной (с ограниченными функциональными возможностями, максимально используя HTTP)?

Я не обязательно говорю, что это плохо, но скорее, если они по существу одинаковы , очень похожи, тогда становится намного легче понять REST и последствия, которые влечет за собой такая архитектура.

Обновление: Вот более конкретные детали:

  1. Ресурсы REST эквивалентны общедоступным классам. Частные классы / ресурсы просто не выставляются.
  2. Состояние ресурса эквивалентно открытым методам или полям класса. Частные методы / поля / состояние просто не отображаются (это не значит, что их там нет).
  3. Несмотря на то, что REST не сохраняет специфичное для клиента состояние по запросам, 1017 * сохраняет состояние ресурса для всех клиентов. Ресурсы имеют состояние, так же, как классы имеют состояние.
  4. Ресурсы REST глобально уникально идентифицируются с помощью URI так же, как объекты сервера глобально уникально идентифицируются по их адресу базы данных, имени таблицы и первичному ключу. Конечно, пока нет URI для представления этого, но вы можете легко его создать.

Ответы [ 8 ]

21 голосов
/ 30 сентября 2008

REST похож на ОО в том, что они оба моделируют мир как сущности, которые принимают сообщения (то есть методы), но помимо этого они разные.

Ориентация объекта подчеркивает инкапсуляцию состояния и непрозрачность , используя как можно больше различных методов, необходимых для работы с состоянием. REST - это передача (представление) состояния и прозрачность . Число методов, используемых в REST, ограничено и одинаково для всех ресурсов. Наиболее близким к этому в ООП является метод ToString(), который очень приблизительно эквивалентен HTTP GET.

Ориентация объекта с состоянием - вы ссылаетесь на объект и можете вызывать методы для него, сохраняя состояние в сеансе, где объект все еще находится в области видимости. REST - это без сохранения состояния - все, что вы хотите сделать с ресурсом, указывается в одном сообщении, и все, что вам нужно знать об этом сообщении, отправляется обратно в одном ответе.

В объектно-ориентированном виде не существует понятия универсальной идентичности объекта - объекты либо получают идентичность по своему адресу памяти в любой конкретный момент, по UUID, зависящему от инфраструктуры, либо по ключу базы данных. В REST все ресурсы идентифицируются с помощью URI , и их не нужно создавать или уничтожать - они всегда существуют в облаке, если сервер не ответит 404 Not Found или 410 Унесено , в этом случае вы знаете, что нет ресурса с этим URI.

REST имеет гарантии безопасности (например, сообщение GET не изменит состояния) и идемпотентности (например, запрос PUT, отправленный несколько раз, имеет тот же эффект, что и один раз ). Хотя в некоторых руководствах для конкретных объектно-ориентированных технологий есть что сказать о том, как определенные конструкции влияют на состояние, в объектной ориентации нет ничего, что говорило бы о безопасности и идемпотентности.

2 голосов
/ 30 сентября 2008

Я думаю, что есть разница между тем, чтобы сказать, что понятие может быть выражено в терминах объектов, и тем, что понятие - это то же самое как ориентация объекта.

ОО предлагает способ описания концепций REST. Это не значит, что сам REST реализует OO.

1 голос
/ 07 октября 2008

Объекты связывают состояние и функционируют вместе. Ориентация на ресурсы заключается в явном моделировании состояния (данных), ограничении функции предопределенными глаголами с универсальной семантикой (в случае HTTP, GET / PUT / POST / DELETE) и оставлении остальной обработки клиенту.

Нет эквивалента этим понятиям в объектно-ориентированном мире.

1 голос
/ 30 сентября 2008

Вы правы. Дэн Коннолли написал статью об этом в 1997 году. Тезис Филдинг также говорит об этом.

0 голосов
/ 30 сентября 2008

REST не только об объектах, но и о свойствах: почтовый запрос к / users / john / phone_number с новым номером телефона не добавляет новый объект, он устанавливает свойство объекта пользователя 'john'

Это даже не все состояние объекта, а лишь изменение малой части состояния.

Это, конечно, не матч 1: 1.

0 голосов
/ 30 сентября 2008

Да, REST - это передача объектов. Но это не весь объект; только текущее состояние объекта. Неявное предположение состоит в том, что определения классов на обеих сторонах REST потенциально похожи; в противном случае состояние объекта было приведено к какому-то новому объекту.

REST заботится только о 4 событиях в жизни объекта: создание (POST), получение (GET), обновление (PUT) и удаление. Это важные события, но есть только эти четыре.

Объект может участвовать во множестве других событий с множеством других объектов. Все остальное это поведение полностью выходит за рамки подхода REST.

Существует тесная связь - REST перемещает объекты - но, говоря, что они одинаковые, ваши объекты превращаются в пассивные наборы битов без методов.

0 голосов
/ 30 сентября 2008

Да, ваша параллель к объектной ориентации верна.

Дело в том, что большинство веб-сервисов (REST, RESTful, SOAP, ..) могут передавать информацию в форме объектов, так что это не то, что отличает ее. SOAP приводит к уменьшению количества сервисов с использованием большего количества методов. REST приводит к увеличению количества сервисов (по 1 на тип ресурса) с несколькими вызовами каждый.

0 голосов
/ 30 сентября 2008

Только если ваши объекты являются DTO ( Объекты передачи данных ) - поскольку вы не можете иметь поведение, отличное от постоянства.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...