当前位置: 首页 > 面试题库 >

Restlet路由的噩梦?

汪典
2023-03-14
问题内容

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

以下是我们使用的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?即使从维护的角度来看,这也很可怕。

有什么建议?我应该重新设计我的网址吗?但是“结构”仍然倾向于相同,从而导致相同的问题


问题答案:

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

但这实际上是一个副作用,您通常不应该陷入这种困境。问题是,您似乎为相同的URI(例如“ / myProject /
WindCondition”)建议了到两个不同资源类的两条路由。

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

  • / {projectName} / walls / {wallName}
  • / {projectName} / winCondition
  • / {projectName} / winCondition / {id]

否则,如果依赖路由顺序使您感到恐惧,则可以自定义默认路由逻辑,以考虑计分的目标方法。



 类似资料:
  • 我正在使用camel和camel-restlet组件来路由RESTFul web服务。我的路由配置如下所示: 我有一些输入路由配置,比如:

  • 一个用Java实现的轻量级REST框架 开放核心是一个中间件抽象层,允许子系统和应用程序直接无缝地运行在Java虚拟机上或各种J2EE应用程序服务器中。它支持所有REST概念(资源、表示、连接器、组件等),并且适合于客户机和服务器Web应用程序。它支持主要的Web标准,如HTTP、SMTP、XML、JSON、WADL和Atom。还有许多扩展可用于与Servlet、Spring、Jetty、Griz

  • 英文原文: http://emberjs.com/guides/routing/specifying-a-routes-model/ 指定路由的模型 应用中的模板背后是由模型来支撑的。那么模板是如何知道需要显示哪些模型的呢? 例如,如果有一个photos模板,那么它是如何知道应该渲染哪一个模型的呢? 这正是Ember.Route的工作之一。通过定义一个与模板同名的,并实现其model方法的路由,是

  • 例如,我们可能希望一些路线只有在用户登录或接受条款和条件后才可访问。 我们可以使用路由哨兵来检查这些条件并控制对路由的访问。 路由哨兵还可以控制用户是否可以离开某个路由。 例如,假设用户已将信息键入页面上的表单,但尚未提交表单。 如果这时离开页面,他们将丢失信息。 如果用户尝试离开路由而不是提交或保存信息,我们可以提示用户。 Angular 提供了五种路由拦截哨兵: CanActive 激活拦截

  • 每个路由可以有不同的属性; 一些常见的属性是: path - 应用程序在特定路由上时在浏览器中显示的URL component - 当应用程序在特定路由上时要呈现的组件 pathMatch - 默认为’prefix’的可选属性。 确定是匹配完整的网址还是仅匹配开头。 当定义一个具有空路径字符串的路径设置pathMatch为’full’时,否则它将匹配所有路径。 children - 表示此路由的子

  • 通过Group可以实现路由分组,Group 路由分组可以简化你的路由撰写: 有两种方法来使用Group: 第一种,创建Group对象,通过Group方法传入 g := tango.NewGroup() g.Get("/1", func() string { return "/1" }) g.Post("/2", func() string { return "/2" }) o :=