2015-04-05 64 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

相關問題