Это известное ограничение для библиотеки Gin , которую KrakenD использует внутренне, вы можете воспроизвести это поведение непосредственно в библиотеке с помощью этого кода go, который будет воспроизводить точно такую же проблему:
package main
import "github.com/gin-gonic/gin"
func main() {
r := gin.New()
r.GET("/ping", handler)
r.GET("/ping/foo", handler)
r.GET("/ping/:a", handler)
r.GET("/ping/:a/bar", handler)
}
func handler(c *gin.Context) {
c.JSON(200, gin.H{
"message": "pong",
})
}
См. Код в этой проблеме .
Решение состоит в том, чтобы объявить пути конечных точек, которые не сталкиваются с подмножествами других конечных точек. В вашей конфигурации конечная точка /api/entity/member/assign/{userID}
является подмножеством /api/entity/{entityID}
.
Обратите внимание, что {placeholders}
подобны использованию подстановочных знаков, поэтому ваша первая конечная точка может быть выражена в других системах, таких как /api/entity/*
, и, следовательно, /api/entity/member/assign/{userID}
является положительным совпадением.
Любое небольшое изменение в вашей конфигурации, когда подстановочный знак не сталкивается, исправит эту ситуацию. Например, следующие две конечные точки будут работать для вас:
/api/entity/find/{entityID}
/api/entity/member/assign/{userID}