2011-06-15 148 views
2

我在寫一個簡單的Web服務,它返回一個JSON響應。它會被大量使用,所以我想嘗試使JSON響應儘可能小以達到性能的原因。我在設計決策上徘徊;一分錢爲您的想法!JSON來自Web服務的響應 - 最佳實踐問題

從服務器我的JSON響應如下所示:

{ 
    "customers": 
    [ 
    { 
     "id": "337", 
     "key": "APIfe45904c" 
    }, 
    { 
     "id": "338", 
     "key": "somethingDifferent" 
    }, 
    { 
     "id": "339", 
     "key": "APIfe45904c" 
    }, 
    { 
     "id": "340", 
     "key": "APIfe45904c" 
    } 
    ] 
} 

這裏APIfe45904c中的記錄,約60-70%的使用,所以我也可以修改JSON響應,除去重複信息並添加default_key即如果沒有指定key,客戶應承擔default_key這樣的:

{ 
    "default_key": "APIfe45904c", 
    "customers": 
    [ 
    { 
     "id": "337" 
    }, 
    { 
     "id": "338", 
     "key": "somethingDifferent" 
    }, 
    { 
     "id": "339" 
    }, 
    { 
     "id": "340" 
    } 
    ] 
} 

沒有用戶正在使用的網絡服務還沒有,所以這不會破壞任何東西。這是好的做法嗎?它的工作原理,併爲一個小的JSON響應,但我衝突。我喜歡使用該服務的開發者的KISS原則,但我也希望儘可能少的JSON響應。

我很想用kikey更換customerscid以幫助減少文件大小,但我想這將是一個問題,如果我想獲得其他客戶開始使用它。出於同樣的原因,我是否應該放棄default_key的想法?

每個JSON響應將可能沒有更多的200線ID /密鑰對,所以我並不需要把分頁等

+0

爲什麼這個標籤「休息」?由於性能原因,消息需要儘可能小的體系結構與REST完全相反,REST依賴於緩存來發送更少的*更大的消息,而不是更小的消息。 – fumanchu 2011-06-15 20:52:13

回答

2

我會保持它的簡單如你所說,然後使用gzip壓縮它。它應該壓縮得非常好,因爲它是重複的,對程序員來說仍然很方便。

在這裏看到指針在輸出的gzip標頭AJAX:Is gzip encoding compatible with JSON?

+0

謝謝;我賣了! – 2011-06-15 18:15:10

1

除非你有非常特殊的性能需求,我總是會選擇在清晰簡潔。特別是對於許多開發人員將要使用的API。

+0

謝謝;我賣了! – 2011-06-15 18:15:16

0

你應該使用一致的格式,其中每個記錄有一個id和一個key字段。您無需在客戶端預先處理JSON即可獲得帶寬損失。

我傾向於像你一樣分析我的JSON數據結構,但最終它不值得你節省的一小部分空間。你的JSON數據結構看起來不錯...你見過Twitter的JSON數據結構嗎?現在這是醜陋的。

0

我會用默認的主要想法,但我不會盡可能縮短屬性名稱,因爲這可能會造成混淆。也許你可以從Web服務調用(從查詢字符串)中獲取參數,該參數指定客戶是否希望縮短屬性名稱。