2013-05-30 31 views
0

我開發了一個基於Restlet API的Web應用程序。隨着時間的推移,我需要添加更多的功能,有時候我需要在不同的端點下重複使用類似的REST API組,這會提供稍微不同的執行上下文(如使用相同模式切換不同的數據庫實例)。我喜歡重構我的代碼以使API可重用,並在不同的端點重用它們。我最初的想法是設計爲每個可重複使用的API的應用程序和它們連接在路由器上:Restlet中的API模塊化

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

的API應該是不可知的REST API的配置。將上下文信息(例如數據庫實例)傳遞給Application API的最佳方式是什麼?這種方法是否可行和正確? Restlet中重用REST API的最佳實踐是什麼?一些代碼示例將被讚賞來說明您的答案。

感謝您的幫助。

回答

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.