找資料時發現一篇有趣的技術文,是由StatHat所撰寫的「83% Bandwidth Reduction via API ResponseChange」。
原理其實相當簡單,一般在設計RESTful API時,最常見的作法就是回傳一個json,裡面通常都會包涵執行結果的狀態碼以及錯誤說明,譬如說下方這個回傳執行成功的範例,包含http header也只有152 bytes。
|
|
但是當你的量大到像是StatHat,每個月有多達1,500億則request,既使每則request都執行成功而回應上面的json,也會使用超過20TB的量 (更別提如果執行失敗,msg
還會帶一些說明而佔用更多bytes)。
在實際使用情境下,絕大多數的request都是正常的執行,他們開始研究要怎麼樣能夠用最少的資料量讓使用者得知他們的request已經成功被執行,再參考RFC-7231後,他們看到了一個常常被遺忘的http狀態碼: 204
,根據RFC-7231,他的定義是
The 204 (No Content) status code indicates that the server has successfully fulfilled the request and that there is no additional content to send in the response payload body.
翻成白話文就是:如果client收到http 204 status code就表示你送出的request有成功的被滿足,句點!沒有其他廢話!
於是乎,回傳的http header變成只有25 bytes,省下了大概125 bytes!
|
|
根據StatHat的觀察,這樣的改變每個月幫他們省下了大概17TB的流量,相當驚人吧!
結論:你得先有如此大的量才需要考慮從http response code來省流量,kerker