Каковы наилучшие/распространенные глаголы и действия URL-адреса RESTful?

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

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

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

хмм. благодаря помощи:)

Ответ 1

Использовать 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 для элемента формы.

Атрибут content метода - это перечисляемый атрибут со следующими ключевыми словами и состояниями:

  • Ключевое слово 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 вы можете отправлять только изменения.

Ответ 2

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

POST, чтобы добавить к нему

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

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

и УДАЛИТЬ, чтобы... удалите его.

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

Ответ 3

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

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

Действия и виды подмостей: index, list, show, new, create, edit, обновить, уничтожить

Обычно вы строили бы это как:

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

Ответ 4

Ниже приведено сопоставление текущих 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)

Тада:)

Ответ 5

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

GET /info/123
POST (or PUT) /info/123 q=What+is+the+meaning+of+life
POST (or PUT) /info/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: /info/456