2015-04-05 66 views
1

我创建一个类型的订票系统,并希望有类似这样的格式来显示数据给用户:通过JSON/Web Service公开这些数据的最佳方式是什么?

      Hours 
      ID 0 1 2 3 4 5 6 7 8 9 . . 
------------------------------------------------------------ 
03/09/2015 ID1 ----++++++++++++++++++++++++++++++++++------- 
      ID2 -----------++++++++++++---------------------- 
      ID3 ----+++++++++++-----------------+++++++++++++ 
03/09/2015 ID1 ----++++++++++++++++++++++++++++++++++------- 
      ID2 -----------++++++++++++---------------------- 
      ID3 ----+++++++++++-----------------+++++++++++++ 

我还管暴露这个数据,所以我想尝试的Web服务要做到这一点的最佳方式(我要去消费与D3.js这个Web服务)

我可以积点的列表暴露在一个非常原始的方式中的数据:

var data = [ 
    ["01/01/2015 00:00:00", "ID1", 0], 
    ["01/01/2015 00:00:15", "ID1", 0], 
    ... 
]; 

似乎有点浪费,因为有很多重复的数据一个将被传输。另一种选择是装在服务器端的数据,并服务于它作为一个“阵列的地图的地图”本身:

var data = [ 
    {date: "01/01/2015", value: [ 
     {id: "ID1", value: [0,0,0,0,1,1,1,1,1...]}, 
     {id: "ID2", value: [0,0,0,0,0,0,0,0,0...]}, 
     {id: "ID3", value: [0,0,0,0,1,1,1,1,1...]} 
    }, 
    {date: "01/02/2015", ... 
]; 

所以,你有一张地图,用“午夜约会”的关键和map的值,用“id”键和包含96个布尔值的数组的值(每15分钟增加一个值)。但是,该选项似乎与数据表非常紧密地结合在一起。

对于现在和可预见的将来,此表是此Web服务的唯一消费者,因此将其耦合可能并不是那么糟糕。另一方面,对表格的任何更改都可能会迫使我们更改表格视图以及Web服务。

回答

1

首先,我认为不值得努力减少看起来有点浪费,因为gzip编码将消除大部分冗余,您应该关注维护成本。你的第二个提议,作为一个协议,是非常具体和不灵活的。如果将精度改为10分钟会怎样?这会花费你一些重写。所以我认为应该在协议中留下一些灵活性。

要指出的另一件事是ISO8601 Time intervals。这样,你可以在时间范围内发送保留间隔,例如每周:

var data = { 
    'ID1' : [ 
    '2015-01-01T01:00:00Z/2015-01-01T09:15:00Z', 
    '2015-01-02T01:00:00Z/2015-02-01T09:15:00Z' 
    ], 
    'ID2' : [ 
    '2015-01-01T02:45:00Z/2015-01-01T05:30:00Z', 
    '2015-01-02T02:45:00Z/2015-02-01T05:30:00Z' 
    ], 
    ... 
}; 

但是,我没有看到你的第一个提案中有什么不好,因为简单性很重要。

+0

我喜欢这个答案。它以有意义的方式对数据进行分组,但也压缩了它。 – wsaxton 2015-04-06 20:52:34

相关问题