0

我开发了一个基于 Restlet API 的 Web 应用程序。随着我随着时间的推移添加更多功能,有时我需要在不同的端点下重用类似的 REST API 组,这提供了稍微不同的执行上下文(比如切换具有相同架构的不同数据库实例)。我喜欢重构我的代码以使 API 可重用并在不同的端点重用它们。我最初的想法是为每个可重用的 API 设计一个应用程序并将它们附加到路由器上:

router.attach("/context1",APIApplication.class)
router.attach("/foo/context2",APIApplication.class)

API 应该与 REST API 的配置无关。将上下文信息(例如数据库实例)传递给应用程序 API 的最佳方式是什么?这种方法可行且正确吗?在 Restlet 中重用 REST API 的最佳实践是什么?一些代码示例将不胜感激,以说明您的答案。

谢谢你的帮助。

4

1 回答 1

0

根据这个骨架示例,我已经看到这个基本设置使用组件作为顶级对象运行,将子应用程序附加到 VirtualHost 而不是路由器。

public class Component extends org.restlet.Component
{
  public Component() throws Exception
  {
    super();
    // Client protocols
    getClients().add(Protocol.HTTP);

    // Database connection
    final DataSource dataSource = InitialContext.doLookup("java:ds");
    final Configuration configuration = new Configuration(dataSource);

    final VirtualHost host = getDefaultHost();

    // Portal modules
    host.attach("/path1", new FirstApplication());
    host.attach("/path2", new SecondApplication(configuration));
    host.attach("/path3", new ThirdApplication());
    host.attachDefault(new DefaultApplication(configuration));
  }
}

我们使用了一个自定义配置对象,基本上是一个 pojo,在需要时传递任何常见的配置信息,并使用它来构建应用程序,我们为每个应用程序使用单独的“默认”上下文。

这最初是针对 restlet 1.1.x 进行编码的,并已通过 2.0.x 升级到 2.1.x,尽管它可以工作并且相当简洁,但在 2.1.x 或 2.2 版本中可能有更好的方法来做到这一点。 X。

于 2013-06-03T15:34:51.607 回答