Почему я поставил маршрутизатор DELETE после GET, конечная точка DELETE не сработала

Я создавал 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")

Работает!

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

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

подумайте о том, как это выполняется.... DELETE /article/{id} соответствует myRouter.HandleFunc("/article/{id}", getOneArticle), поэтому программа не переходит к следующему маршруту

Derek Pollard 20.05.2019 22:41

но что то я ставлю сначала DELETE, следующий getOneArticle все равно работает,

Ping Woo 21.05.2019 02:25

Итак, запрос DELETE соответствует операции GET???

Ping Woo 21.05.2019 02:26
Создание API ввода вопросов на разных языках программирования (Python, PHP, Go и Node.js)
Создание API ввода вопросов на разных языках программирования (Python, PHP, Go и Node.js)
API ввода вопросов - это полезный инструмент для интеграции моделей машинного обучения, таких как ChatGPT, в приложения, требующие обработки...
0
3
312
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

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

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

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

Другие вопросы по теме