Можно ли создавать свои REST запросы?
Возник глупый вопрос про типы запросов REST. Я понимаю, что эти методы общепринятые:
POST - создание. PUT - замена целиком. PATCH - редактирование. DELETE - удаление. и тд.
Однако могу ли я создавать свои собственные?
У меня есть функция которая вызывается через onclick и записывает id элемента:
function test(){
var element = document.getElementById(e);
var json = {};
var bot_id = element.id
var token = '{{csrf_token}}';
json["id"]=bot_id
$.ajax({
headers: { "X-CSRFToken": token },
url: window.location.pathname,
type: 'SUNRISE',
data: JSON.stringify({
json
})
});}
и передает во views.py который выводит этот id на html страницу:
def test(request):
if request.method == "SUNRISE":
a=request.body
stream = io.BytesIO(a)
data = JSONParser().parse(stream)
return render(request, "test.html", {"id": data["json"]['bot_id']})
В консоли выводит как стандартный запрос "SUNRISE /main/ HTTP/1.1" 200 14982 и переводит на html страницу с id. Почему-то это работает? И можно ли это использовать? Обязательно ли использовать общепринятый метод для каких-то действий? (Например: Отправлять DELETE, но вместо удаления создавать новый объект.)
Ответы (2 шт):
Нет, методы запросов зафиксированы в спецификации HTTP: https://tools.ietf.org/html/rfc2616#section-9.1.2.
Более того, это транспортный протокол, который находится на уровень ниже, чем ваша бизнес логика.
Метод - это просто последовательность из любых символов, кроме управляющих и разделителей. В RFC 2616, ссылку на который привели в соседнем ответе, явно указывается, что приведённые в нём методы - это всего лишь общеупотребительные методы, и что этот список может быть расширен.
То, как будет интерпретирован метод, и какие действия на стороне сервера он вызовет - зависит исключетельно от самого сервера. Какую логику напишите, так и будет.
Например, часто не реализуют отдельно методы PUT и PATCH, а ограничиваются только методом POST. Если он вызывается для несуществующего ресурса, то создаётся новый, а если для существующего - то редактируется.
Но, разумеется, не стоит совсем уж радикально отходить от общепринятых практик.