Каковы лучшие / общие RESTful глаголы и действия URL?

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

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

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

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

5 ответов

Решение

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

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

/questions/show/<whatever>

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

/questions/<question>

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


ПОЛУЧИТЬ:

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

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

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

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

GET /questions HTTP/1.1
Host: whateverblahblah.com

СООБЩЕНИЕ:

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

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

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

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

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

POST /questions HTTP/1.1
Host: whateverblahblah.com

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

УДАЛЯТЬ:

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

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

ПОЛОЖИЛ:

Используется для создания ресурса или его перезаписи при указании 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 вы можете отправлять только изменения.

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

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

PUT, чтобы создать или заменить его

ПОЛУЧИТЕ, чтобы просмотреть / запросить это

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

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

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

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

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

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

http://application.com/controller/<action>/<id>

Вот сопоставление ваших текущих 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)

Тада:)

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

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
Другие вопросы по тегам