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