2016-01-22 49 views
1

我们有一个现有的Web应用程序,它具有不基于REST的API。我们希望使用Strongloop将REST API放在它的前面,然而,迷失在文档中并且不确定是否可以实现。Strongloop REST连接器 - 连接到非REST远程资源

例如:

想在Strongloop中配置一个端点,它看起来像;

本地主机:3000/API /数据对象/订单起始日期= 01/01/2016 &结束日期= 31/01/2016

就这样结束了A点应该服务于我们现有的Web应用程序的请求? ,URL的位置在哪里;

本地主机:4000/WH页= ObjectBuilder的&名称=订单&的StartDate = 01/01/2016 &结束日期= 31/01/2016

即,从API请求采取订单和插入远程URL以及其余参数。

我可以使用express.js编码,但想知道这是否可以使用Strongloop中的配置?

谢谢!

+0

你*可以*用LoopBack做到这一点,但你最终自己做了很多工作。因为你基本上必须重写'find','findById','save','destroy'等方法来匹配你的端点。但是,REST连接器不仅需要连接到适当的“REST”API,还可以连接到任何基于URL的API。我会看看是否可以使用您提供的URL格式来处理一个示例。 – jakerella

回答

0

我想你也许可以使用built-in REST connector即使你的遗留API不是休息本身(虽然你没有得到的所有好处内置映射findcreatedestroy,等等)。连接器只是将URL转换为模型方法。这就是说,我认为你确实需要让旧的API吐出JSON ......它是这样做的吗?如果没有,那么你基本上只需要写一个完整的翻译器。

这不是工作代码,但可能会帮助您获得部分途径。

在你server/datasources.json文件:

"old-service": { 
    "name": "old-service", 
    "connector": "rest", 
    "operations": [{ 
     "template": { 
      "method": "GET", 
      "url": "http://localhost:4000/wh", 
      "headers": { 
       // whatever you might need to send... 
      }, 
      "query": { 
       "Page": "ObjectBuilder", 
       "Name": "{name}", 
       "StartDate": "{start}", 
       "EndDate": "{end}" 
      }, 
      "responsePath": "$.results.theObject" // be sure to custom ize this 
     }, 
     "functions": { 
      "buildObject": ["name", "start", "end"] 
     } 
    }] 
} 

在你server/model-config.json一定太贵DataObject模型映射到这个数据源:

{ 
    // ... 
    "DataObject": { 
    "public": true, 
    "dataSource": "old-service" 
    }, 
} 

而在你的模型本身(common/models/DataObject.js),你现在可以调用buildObject()方法:

DataObject.buildObject('Order', '01/01/2016', '31/01/2016', function(err, result, response) { 
    if (err) { ... } 
    // otherwise look at the result or response... 
}); 

现在你可以调用这个方法,你可以把它放到这个模型的remoteMethod甚至override the default find method

祝你好运,但在许多情况下,你只需自己编写“转换”代码即可。可能更容易从头开始重写API。 ;)