Является ли www.example.com/post/21/edit RESTful URI? Я думаю, что знаю ответ, но есть другой вопрос - PullRequest
4 голосов
/ 01 мая 2010

Я почти боюсь опубликовать этот вопрос, должен быть очевидный ответ, который я упустил, но здесь я иду:

Контекст: я создаю блог для образовательных целей (хочу изучать python и web.py). Я решил, что в моем блоге есть посты, поэтому я создал класс постов. Я также решил, что сообщения могут быть созданы, прочитаны, обновлены или удалены (так что CRUD). Поэтому в своем классе Post я создал методы, которые отвечают на HTTP-методы POST, GET, PUT и DELETE). Все идет нормально.

Текущая проблема, с которой я сталкиваюсь, является концептуальной, я знаю, что отправка HTTP-сообщения PUT (с отредактированным сообщением), например, / post / 52, должна обновить сообщение с идентификатором 52 с содержимым тела HTTP сообщение.

Что я не знаю , так это то, как концептуально правильно обслуживать страницу редактирования (HTML).

Будет ли делать это следующим образом: / post / 52 / edit нарушит идею URI, поскольку edit - это не ресурс, а действие?

С другой стороны, может ли он считаться ресурсом, поскольку все, на что URI будет отвечать, - это метод GET, который будет возвращать только HTML-страницу?

Итак, мой последний вопрос заключается в следующем: как мне обслуживать HTML-страницу, предназначенную для пользовательского редактирования, в режиме RESTful?

Ответы [ 4 ]

4 голосов
/ 01 мая 2010

Другой подход RESTful заключается в использовании строки запроса для модификаторов: /post/52?edit=1

Кроме того, не зацикливайтесь на чистоте модели REST. Если ваше приложение не вписывается в модель, нарушайте правила.

3 голосов
/ 01 мая 2010

RESTful URI не существует. Это ложная концепция, поскольку URI должны быть полностью непрозрачными для клиента.

Если это поможет вам правильно реализовать унифицированный интерфейс HTTP, избегая глаголов в ваших URI, то это здорово, но не стесняйтесь того, как выглядит ваш URI. Очень ограниченно думать о моделировании ресурсов как о типе моделирования данных. Система RESTful обычно должна выполнять намного больше, чем просто операции CRUD, поэтому вам нужно проявлять творческий подход к тому, какие ресурсы вы делаете доступными в вашей системе.

Если вы создаете URL и разыменовываете его, возвращается код состояния 200, тогда этот URL ссылается на ресурс. Если вы создаете другой URL-адрес и он также возвращает 200, то это разностный ресурс.

Это значит:

http://example.org/customer/10.xml
http://example.org/customer/10.json
http://example.org/customer/10?format=xml
http://example.org/customer/10?format=json

- это 4 разных ресурса, а

http://example.org/customers
http://example.org/customers?closed=true
http://example.org/customers?page=2&pagelength=20

тоже разные ресурсы.

Поэтому, чтобы ответить на ваш вопрос, если вы сделаете

GET /post/52/edit 

и возвращает код состояния 200 и представление, тогда это должен быть ресурс.

2 голосов
/ 01 мая 2010

Вместо того, чтобы называть это /post/52/edit, что если вы назвали это /post/52/editor?

Теперь это ресурс. Дилемма предотвращена.

0 голосов
/ 01 мая 2010

Я не думаю, что / object / id / action является частью спецификации REST.

Будет ли ваш редактор общим для всех объектов? Тогда, возможно, ваш URL должен выглядеть как

/editor/object/id

Действие является HTTP-глаголом (GET, PUT, DELETE, POST) и должно быть частью HTTP-запроса, а не частью URL. Для лучшего обзора, посмотрите эту статью в Википедии на RESTful_web_services .

...