Мое единственное реальное воздействие идеям REST было посредством УСПОКОИТЕЛЬНОЙ маршрутизации Ruby on Rails. Это хорошо подошло мне для вида основанных на CRUD приложений, которые я создал с направляющими, но следовательно мое понимание УСПОКОИТЕЛЬНОСТИ несколько ограничено.
Скажем, у нас есть конечный набор Объектов, каждый из которых имеет уникальный идентификатор и много свойств, таких как цвет, форма и размер (который мог бы быть не определен для некоторых Объектов).
Объекты могут использоваться клиентом сроком на время, но каждый Объект может только использоваться одним клиентом сразу. Доступ к Объектам отрегулирован сервером. Клиенты могут запросить временное использование определенных объектов с сервера.
Обычно, клиенты будут только интересоваться получением доступа ко многим Объектам с особыми свойствами, вместо того, чтобы получить доступ к определенным Объектам.
Когда клиент запрашивает использование многих Объектов, сервер отвечает списком идентификаторов, соответствующих запросу, или с ответом, который говорит, что требуемые Объекты не в настоящее время доступны или не существуют.
Клиент может сделать следующие виды запроса:
Игрушечный пример выше похож на проблему распределения ресурсов, с которой я должен был иметь дело недавно. Как я должен пойти о размышлении об этом УСПОКОИТЕЛЬНО?
Уловка для понимания состоит в том, чтобы думать о проблемах, сосредотачиваясь на существительных, а не на глаголах.
В остальном мире все глаголы «предустановлены», а существительные становятся бесконечно гибкими. В мире мыла или roc глаголы бесконечно гибкие. Ограничьте свое мышление блокировкой глаголов, а затем посмотрите, какие существительные вам нужны, чтобы решить вашу проблему в рамках имеющихся ограничений.
Это именно то, что darrel сделал в ответе выше - он придумал новое существительное для блокировки, которая удовлетворяла бы вашим ограничениям, а затем установил доступ к ним для достижения того, что вы хотели.
Некоторые из ваших вопросов были связаны с поиском или фильтром - для тех, кто думает о GET в отношении типов ресурсов, с передачей параметров запроса для ограничения или фильтрации результатов.
Если блокировка ресурсов действительно является проблемой домена в вашем сценарии, то я бы рекомендовал моделировать блокировку как ресурс.
Вот несколько предложений о том, как вы могли бы выполнить предложенные вами запросы.
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.
Прочтите это, чтобы получить базовые знания ... Я застрял в том, что такое ОТДЫХ ... !!!
Система управления контентом может содержать набор статей. Здесь неявно два ресурса. Во-первых, это отдельные статьи. Каждый составляет ресурс. Есть и второй ресурс: сборник статей.
Чтобы получить список всех статей, мы могли бы отправить 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.