Каковы лучшие / общие глаголы и действия RESTful url? - PullRequest
82 голосов
/ 02 ноября 2008

Я пытаюсь найти информацию о лучших и наиболее распространенных действиях RESTful url.

например, какой URL-адрес вы используете для отображения деталей элемента, для редактирования элемента, обновления и т. Д.

/question/show/<whatever>
/question/edit/<whatever>
/question/update/<whatever> (this is the post back url)
/question/list   (lists the questions)

гм. спасибо всем, кто выручал :)

Ответы [ 5 ]

167 голосов
/ 02 ноября 2008

Используйте URL для указания ваших объектов, а не ваших действий:

Обратите внимание, что вы впервые упомянули не RESTful:

/questions/show/<whatever>

Вместо этого вы должны использовать свои URL для указания ваших объектов:

/questions/<question>

Затем вы выполняете одну из следующих операций с этим ресурсом.


GET:

Используется для получения ресурса, запроса списка ресурсов, а также для запроса информации о ресурсе только для чтения.

Для получения ресурса вопроса:

GET /questions/<question> HTTP/1.1
Host: whateverblahblah.com

Чтобы перечислить все ресурсы вопросов:

GET /questions HTTP/1.1
Host: whateverblahblah.com

POST:

Используется для создания ресурса.

Обратите внимание, что следующее является ошибкой:

POST /questions/<new_question> HTTP/1.1
Host: whateverblahblah.com

Если URL еще не создан, не следует использовать POST для его создания при указании имени. Это должно привести к ошибке «ресурс не найден», поскольку еще не существует. Сначала вы должны поместить ресурс на сервер. Вы можете утверждать, что, создавая новый вопрос, вы также обновляете ресурс / questions, поскольку теперь он возвращает еще один вопрос в своем списке вопросов.

Вы должны сделать что-то вроде этого, чтобы создать ресурс, используя POST:

POST /questions HTTP/1.1
Host: whateverblahblah.com

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

DELETE:

Используется для удаления ресурса.

DELETE /questions/<question> HTTP/1.1
Host: whateverblahblah.com

PUT:

Используется для создания ресурса или его перезаписи при указании URL-адреса ресурса.

Для нового ресурса:

PUT /questions/<new_question> HTTP/1.1
Host: whateverblahblah.com

Чтобы перезаписать существующий ресурс:

PUT /questions/<existing_question> HTTP/1.1
Host: whateverblahblah.com

... Да, они одинаковы. PUT часто описывается как метод «edit», так как, заменяя весь ресурс слегка измененной версией, вы редактировали то, что клиенты ПОЛУЧАЮТ, когда они в следующий раз делают.


Использование REST в формах HTML:

Спецификация HTML5 определяет GET и POST для элемента формы .

Атрибут содержимого метода является перечисляемым атрибутом со следующими ключевыми словами и состояниями:

  • Ключевое слово GET, отображающее состояние GET, указывающее метод HTTP GET.
  • Ключевое слово POST, отображающее состояние POST, указывающее метод HTTP POST.

Технически, спецификация HTTP не ограничивает вас только этими методами. Вы технически свободны добавлять любые методы, которые хотите, но на практике это не очень хорошая идея. Идея состоит в том, что все знают, что вы используете GET для чтения данных, поэтому если вы решите вместо этого использовать READ, это может сбить вас с толку. Это сказало ...

PATCH:

Это метод, который был определен в формальном RFC. Он предназначен для использования, когда вы хотите отправить только частичную модификацию ресурса, он будет использоваться так же, как PUT:

PATCH /questions/<new_question> HTTP/1.1
Host: whateverblahblah.com

Разница в том, что PUT должен отправлять весь ресурс, независимо от того, насколько он велик по сравнению с тем, что на самом деле изменилось, тогда как PATCH вы можете отправить просто изменений.

10 голосов
/ 02 ноября 2008

Если предположить, что /questions/10 является правильным вопросом, то метод используется для взаимодействия с ним.

ПОСТ, чтобы добавить к нему

PUT для создания или замены

GET для просмотра / запроса

и УДАЛИТЬ хорошо .. удалить его.

URL не меняется.

3 голосов
/ 02 ноября 2008

Я собираюсь выйти на конечность и предположить, что вы имеете в виду то, что вы подразумеваете под стандартными контроллерами для MVC, когда говорите URL-адреса "RESTful", поскольку ваши примеры можно считать не "RESTful" (см. эта статья).

Поскольку Rails действительно популяризировал стиль URL, который вам, кажется, интересен, я предлагаю ниже действия контроллера по умолчанию, производимые ScaffoldingGenerator в Ruby on Rails. Они должны быть знакомы всем, кто использует приложение Rails.

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

Как правило, вы должны построить это как:

http://application.com/controller/<action>/<id>
1 голос
/ 05 ноября 2008

Вот сопоставление ваших текущих URL с использованием принципа REST:

/question/show/<whatever>

Если вы определили вопрос как ресурс, то у него должен быть уникальный URL. Использование GET для отображения (извлечения) является обычной практикой. Становится:

GET /question/<whatever>

/question/edit/<whatever>

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

Здесь два варианта: ваше приложение является приложением (а не веб-сайтом), тогда вам может быть лучше использовать JavaScript для преобразования ресурса в редактируемый ресурс на стороне клиента.

Если это веб-сайт, то вы можете использовать тот же URL-адрес с дополнительной информацией, чтобы указать другое представление, обычная практика:

GET /question/<whatever>;edit

/question/update/<whatever> (this is the post back url)

Это для изменения вопроса, поэтому PUT является правильным методом для использования:

PUT /question/<whatever>

/question/list   (lists the questions)

Список вопросов на самом деле является родительским ресурсом вопроса, поэтому, естественно, это:

GET /question

Теперь вам может понадобиться еще:

POST /question (create a new question and returns its URL)
DELETE /question/<whatever> (deletes a question if this is relevant)

Тада:)

0 голосов
/ 04 июля 2009

Ваши четыре примера могут быть:

GET /questions/123
POST (or PUT) /questions/123 q=What+is+the+meaning+of+life
POST (or PUT) /questions/123 q=What+is+the+meaning+of+life
GET /questions

Добавить вопрос:

POST /questions q=What+is+the+meaning+of+life

Сервер ответит:

200 OK (or 201 Created)
Location: /questions/456
...