【问题标题】:Resource or Restlet资源或 Restlet
【发布时间】:2018-04-20 15:36:59
【问题描述】:

我正在使用 Restlet 2.2.1 并构建 Rest 服务。如您所知,Router 用于附加 Restlet 或 Resource 作为目标。

Router router = new Router( getContext() );

router.attach("/healthcheck1",HealthCheckResource.class );
router.attach("/healthcheck2", new HealthCheckRestlet() );

然后你就可以在handle()

中实现你的逻辑了

想知道哪个最好用?我知道 Resource 有一个非常明确的生命周期(doInit、handle、release ...)和实现像初始化这样的一次性逻辑的好地方。

【问题讨论】:

    标签: restlet


    【解决方案1】:

    在可行的情况下附加ServerResource 子类而不是Restlet 实例,原因如下:

    • 资源是构建 RESTful API 的自然方式。当您在资源类上使用 @Get、@Put 等注释时,您实际上是在记录 RESTful API 的那部分,并且有一些工具可以提取该信息以自动创建在线文档。如果您使用Restlet 实例,则其响应GET、PUT 等的行为不会立即显现。具有讽刺意味的是,使用Restlet 可以更轻松地编写非 RESTful API。

    • 为每个请求创建一个单独的资源类实例,这意味着一个实例通常被限制在一个线程中,这简化了关于线程安全的推理。相反,相同的Restlet 实例将用于所有handle(...) 调用,这可能会导致复杂的线程安全要求。

    因为每个请求都有自己的资源实例,资源方法可能需要调用通过应用程序上下文传递或注入资源的内部服务(请参阅this Restlet extension)。

    顺便说一句,您对“像初始化这样的一次性逻辑”的评论可能是一种误解。 doInit 方法为每个实例化的资源调用(即,对该资源的每个请求一次),不是仅一次。

    请注意,我建议不要将 Restlet 直接子类化为资源 URL 的最终目标,但可能是琐碎的资源除外。使用Restlet 的子类 是另一回事:附加一个包装资源的Filter 很好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-04-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多