2011-10-23 28 views
6

我有資源,這樣HTTP範圍標頭的實體列表

/entities  # GET, POST 
/entities/<id> # GET, PUT, DELETE 

GET /實體獲取所有實體的名單。 現在我想查詢更新。單個實體的情況很簡單:

GET /entities/2 
If-Modified-Since: <http date> 

該列表很棘手。我希望響應是實體列表,自給定時間點以來更新或創建。我會直覺地使用

GET /entities 
Range: after <http date> 

這是HTTP規範http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.35.2的有效請求。但該規範還要求一個206 Partial Content響應,該響應必須包含一個Content-Range標題。一個Content-Range頭又依次指定一個字節範圍來指定http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.16。這對我的用例來說顯然非常不方便。

如何通過HTTP請求語義範圍?

+0

你肯定'Range'可以與日期一起使用? 14.35.1節只討論字節範圍。 –

+0

我同意@adrift,在任何RFC的範圍內我都找不到任何引用,範圍:在HTTP/1.1中有效 - 如果是的話,將定義Content-Range:頭來適應它,否則這種做法只會被定義爲一半。 – DaveRandom

+0

Httpbis規範似乎有關於非字節範圍的更多細節http://tools.ietf.org/html/draft-ietf-httpbis-p5-range-16 –

回答

2

從閱讀部分14.35.1,我會說Range標頭用於從資源請求一個特定範圍的字節,而不是根據它們被修改的時間來請求一組實體。

在這種情況下,我相信你應該把你的範圍作爲一個過濾器,並通過日期作爲查詢字符串參數:

GET /entities?modified-since=<date> 
+0

這也是我得出的結論。爲了將來的兼容性,非字節範圍似乎被允許,但是非常不明確。 – Bendlas