Можно ли создавать свои 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 шт):

Автор решения: tcpack4

Нет, методы запросов зафиксированы в спецификации HTTP: https://tools.ietf.org/html/rfc2616#section-9.1.2.

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

→ Ссылка
Автор решения: Xander

Метод - это просто последовательность из любых символов, кроме управляющих и разделителей. В RFC 2616, ссылку на который привели в соседнем ответе, явно указывается, что приведённые в нём методы - это всего лишь общеупотребительные методы, и что этот список может быть расширен.

То, как будет интерпретирован метод, и какие действия на стороне сервера он вызовет - зависит исключетельно от самого сервера. Какую логику напишите, так и будет.

Например, часто не реализуют отдельно методы PUT и PATCH, а ограничиваются только методом POST. Если он вызывается для несуществующего ресурса, то создаётся новый, а если для существующего - то редактируется.

Но, разумеется, не стоит совсем уж радикально отходить от общепринятых практик.

→ Ссылка