Почему я ставлю маршрутизатор DELETE после GET, конечная точка DELETE не запускается - PullRequest
0 голосов
/ 20 мая 2019

Я создавал restful API с Golang, и я помещал маршрутизатор удаления после маршрутизатора getOne по индексу, а маршрутизатор удаления никогда не срабатывал? Не знаю почему? Когда я переворачиваю их, это работает! Может кто-то знает причину ??

Это для построения Restful API с Golang.

Не работает:

myRouter.HandleFunc("/article", createNewArticle).Methods("POST")

myRouter.HandleFunc("/article/{id}", getOneArticle)

myRouter.HandleFunc("/article/{id}", deleteArticle).Methods("DELETE")

Works!

myRouter.HandleFunc("/article", createNewArticle).Methods("POST")
myRouter.HandleFunc("/article/{id}", deleteArticle).Methods("DELETE")
myRouter.HandleFunc("/article/{id}", getOneArticle)

Когда я тестирую API, используя почтальон с методами DELETE, он всегда вызывает getOneArticle и отвечает удалением, но фактически не удаляет в базе данных!

1 Ответ

3 голосов
/ 21 мая 2019

Вы используете гориллу / мукс. При поступлении HTTP-запроса этот маршрутизатор пытается сопоставить маршруты в порядке их добавления.

Когда вы добавляете маршрут без указания метода HTTP, он применяется ко всем методам HTTP.

Итак, если ваш более конкретный маршрут, соответствующий методу DELETE, идет первым, то он будет соответствовать вызовам метода DELETE, а следующий маршрут будет соответствовать всем методам. Хотя он также будет соответствовать DELETE, фактический вызов DELETE никогда не достигнет его из-за предшествующего ему маршрута.

Но если вы измените их, маршрут, в котором не указан метод HTTP, будет соответствовать всем методам, включая DELETE.

...