Я создавал 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, следующий getOneArticle все равно работает,
Итак, запрос DELETE соответствует операции GET???
Вы используете gorilla/mux. Когда приходит HTTP-запрос, этот маршрутизатор пытается сопоставить маршруты в том порядке, в котором вы их добавляете.
Когда вы добавляете маршрут без указания метода HTTP, он применяется ко всем методам HTTP.
Итак, если ваш более конкретный маршрут, соответствующий методу DELETE, идет первым, тогда он будет соответствовать вызовам метода DELETE, а следующий маршрут будет соответствовать всем методам. Хотя он также будет соответствовать DELETE, фактический вызов DELETE никогда не достигнет его из-за предшествующего ему маршрута.
Но если их поменять местами, маршрут, в котором не указан метод HTTP, будет соответствовать всем методам, включая DELETE.
подумайте о том, как это выполняется....
DELETE /article/{id}
соответствуетmyRouter.HandleFunc("/article/{id}", getOneArticle)
, поэтому программа не переходит к следующему маршруту