具有版本化数据和差异端点的REST API:优化带宽和性能

时间:2015-07-08 18:27:02

标签: node.js rest express sails.js database-versioning

我的NodeJS项目基于SailsJS,本身使用ExpressJS。

移动应用会使用其API来从中获取数据。

棘手的部分是我不希望每次数据库发生更改时客户端应用程序都会获取整个数据树。

客户端只需要下载已经获得的数据与服务器上的数据之间的差异。

为了实现这一点,我想到在服务器上使用git。这是创建一个存储库并将所有端点保存为repo中的json文件。每次保存都会触发自动提交。

然后我可以创建一个特定的API端点,它将接受一个提交sha作为参数,并在它和git HEAD之间返回一个diff。

威廉·本顿的

This post以这个想法安慰我。

我现在正在寻找可以帮助我根据上面提到的语言和框架实现这一目标的任何提示:

  • 我希望看到这个概念的证明,但却找不到一个
  • 我找不到一种简单的方法来使用git和NodeJS。
  • 我不确定如何解析使用IONIC框架开发的客户端应用程序返回的差异,所以AngularJS。

注意:api只能读取。所有数据库移动都将由少数用户使用的自定义Web后端触发。

1 个答案:

答案 0 :(得分:0)

我在帖子中使用了experimental configuration-management service的想法。该代码在Erlang中,我不能提供特定于Node的建议,但我有一些一般的建议。

从我感兴趣使用的任何语言来看,调用git本身并不是一个很好的选择。使用git作为通用的版本化对象存储实际上工作得非常好,但是使用git管道命令是一种痛苦(并且由于所有的分支而变慢)并且(当时)对所有可用的本机存在限制git库。

我最终实现了我自己的持久性trie数据结构,并在它上面放了一个类似git的库接口。这样做的好处是你的差异可能对你正在存储的数据格式敏感;如果你打电话给git,那么你很难找到适合标准差异的数据的序列化格式。 (但是,如果没有可扩展的格式,您仍然可以向客户端发回一系列操作,以便在他们拥有的任何陈旧对象上重放。)