Restlet路由噩梦?

好吧这很荒谬:(或者可能我的设计是:)

以下是我们使用的url:

/{projectName}/{wallName} - GET only: fetch all win conditions posted to the all /{projectName}/WinCondition - POST a new Win Condition /{projectName}/WinCondition/{id} - GET, PUT & DELETE 

现在有趣的部分:

如果代码按上面的顺序排序,则调用POST: /myProject/WinCondition将被路由到带有wallName的第一个路径! 从而获得405。

如果我将/{projectName}/{wallName}移到底部,那么它会被正确路由!

现在这就是我所知道的:

  • Restlet中的默认路由模式是MODE_FIRST_MATCH。 我将其设置为MODE_BEST_MATCH,URL的顺序仍然很重要! 我无法访问“亲和力”分数来检查问题/得分是什么。 匹配模式为Template.MODE_EQUALS。

问题是:我是否必须关注如何在我的java文件中订购URL? 即使从维护的角度来看,这也是可怕的。

有什么建议么? 我应该重新设计我的url吗? 但“结构”仍然倾向于导致同样的问题

“/ {projectName} / {wallName}”和“/ {projectName} / WinCondition”将获得FIRST_MATCH和BEST_MATCH的相同分数,因此它仍然是获胜路线列表中的第一个。

但这实际上是一种副作用,一般来说你不应该让自己陷入困境。 问题是,对于相同的URI(例如“/ myProject / WindCondition”),您似乎提出了两个到两个不同资源类的路由。

您应该考虑重新设计URI以防止此类冲突。 这是一个建议:

  • / {PROJECTNAME} /壁/ {wallName}
  • / {PROJECTNAME} / winCondition
  • / {PROJECTNAME} / winCondition / {ID]

否则,如果依赖路线订单吓到您,则可以自定义默认路由逻辑以考虑评分的目标方法。