Понимание REST через пример

Мое единственное реальное воздействие идеям REST было посредством УСПОКОИТЕЛЬНОЙ маршрутизации Ruby on Rails. Это хорошо подошло мне для вида основанных на CRUD приложений, которые я создал с направляющими, но следовательно мое понимание УСПОКОИТЕЛЬНОСТИ несколько ограничено.


Скажем, у нас есть конечный набор Объектов, каждый из которых имеет уникальный идентификатор и много свойств, таких как цвет, форма и размер (который мог бы быть не определен для некоторых Объектов).

Объекты могут использоваться клиентом сроком на время, но каждый Объект может только использоваться одним клиентом сразу. Доступ к Объектам отрегулирован сервером. Клиенты могут запросить временное использование определенных объектов с сервера.

Обычно, клиенты будут только интересоваться получением доступа ко многим Объектам с особыми свойствами, вместо того, чтобы получить доступ к определенным Объектам.

Когда клиент запрашивает использование многих Объектов, сервер отвечает списком идентификаторов, соответствующих запросу, или с ответом, который говорит, что требуемые Объекты не в настоящее время доступны или не существуют.

Клиент может сделать следующие виды запроса:

  • Скажите мне сколько зеленых треугольных Объектов, там (в общем/доступном).
  • Дайте мне использование 200 больших красных Объектов.
  • Я закончил с Объектами 21, 23, 23.
  • Добавьте 100 новых Объектов красного квадрата.
  • Удалите 50 небольших зеленых Объектов.
  • Измените все большие желтые пятигранные Объекты для синего.

Игрушечный пример выше похож на проблему распределения ресурсов, с которой я должен был иметь дело недавно. Как я должен пойти о размышлении об этом УСПОКОИТЕЛЬНО?

6
задан Oded 1 May 2010 в 16:20
поделиться

3 ответа

Уловка для понимания состоит в том, чтобы думать о проблемах, сосредотачиваясь на существительных, а не на глаголах.

В остальном мире все глаголы «предустановлены», а существительные становятся бесконечно гибкими. В мире мыла или roc глаголы бесконечно гибкие. Ограничьте свое мышление блокировкой глаголов, а затем посмотрите, какие существительные вам нужны, чтобы решить вашу проблему в рамках имеющихся ограничений.

Это именно то, что darrel сделал в ответе выше - он придумал новое существительное для блокировки, которая удовлетворяла бы вашим ограничениям, а затем установил доступ к ним для достижения того, что вы хотели.

Некоторые из ваших вопросов были связаны с поиском или фильтром - для тех, кто думает о GET в отношении типов ресурсов, с передачей параметров запроса для ограничения или фильтрации результатов.

6
ответ дан 9 December 2019 в 22:30
поделиться

Если блокировка ресурсов действительно является проблемой домена в вашем сценарии, то я бы рекомендовал моделировать блокировку как ресурс.

Вот несколько предложений о том, как вы могли бы выполнить предложенные вами запросы.

GET /Triangle/Green/Count
GET /Triangle/Green/Available

POST /Item/Red/Large/Locks?quantity=200

DELETE /Item/21/Lock
DELETE /Item/23/Lock
DELETE /Item/25/Lock

POST /Square/Red?quantity=100

DELETE /Item/Green/Small?quantity=100

POST /Pentagon/Blue?url=/Pentagon/Yellow

Сказав это, определение URL-адресов в некоторой степени не имеет значения. Проектирование типов носителей с соответствующими отношениями ссылок является критической частью проектирования RESTful.

5
ответ дан 9 December 2019 в 22:30
поделиться

Прочтите это, чтобы получить базовые знания ... Я застрял в том, что такое ОТДЫХ ... !!!

Система управления контентом может содержать набор статей. Здесь неявно два ресурса. Во-первых, это отдельные статьи. Каждый составляет ресурс. Есть и второй ресурс: сборник статей.

Чтобы получить список всех статей, мы могли бы отправить HTTP-запрос GET для этой коллекции, скажем, по пути / article. Чтобы получить содержимое отдельного ресурса, мы должны его идентифицировать. В Rails можно указать значение его первичного ключа (то есть его идентификатор). Мы снова отправим запрос GET, на этот раз по URL-адресу / article / 1. Пока все это выглядит довольно знакомо. Но что происходит, когда мы хотим добавить статью в нашу коллекцию?

В приложениях, не поддерживающих RESTful, мы, вероятно, изобрели бы какое-то действие с глагольной фразой в качестве имени: article / add_article / 1. В мире REST мы не должны этого делать: мы должны сообщать ресурсам, что делать, используя стандартный набор глаголов.Чтобы создать новую статью в нашей коллекции с помощью REST, мы будем использовать HTTP-запрос POST, направленный по пути / article, с данными публикации, содержащими статью, которую нужно добавить. Да, это тот же путь, который мы использовали для получения списка статей: если вы отправляете на него GET, он отвечает списком, а если вы выполняете POST для него, он добавляет новую статью в коллекцию.

Сделайте еще один шаг вперед. Мы уже видели, что вы можете получить содержание статьи, отправить запрос GET по пути / article / 1. Чтобы обновить эту статью, вы должны отправить HTTP-запрос PUT для того же URL. А чтобы удалить его, вы можете отправить HTTP-запрос DELETE, снова используя тот же URL.

0
ответ дан 9 December 2019 в 22:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: