2014-02-13 30 views
9

我搜遍了很多,但我找不到這個問題的好答案。 作爲一個HATEOAS愛好者,我會認爲,這頭伏貼:爲什麼大多數API分頁不依賴HTTP Range頭?

Range: item=1-20/100 

在HTTP規範,我有些不明白,「矛盾」: 範圍單位可以接受「的其他範圍單元」 ...

range-unit  = bytes-unit | other-range-unit 
    bytes-unit  = "bytes" 
    other-range-unit = token 

...但該規範是後來明確:

唯一範圍由HTTP定義/單元1.1是 「字節」。 HTTP/1.1實現可以忽略使用其他單位指定的範圍。

最後的規範與此語句結束:

HTTP/1.1已被設計爲允許不依賴於範圍的知識應用的實現。

  • 是否允許其他任何字節而不是字節?
  • 如果HTTP/1.1被設計爲允許應用程序不依賴於範圍,那麼依賴它來實現API的真正缺點是什麼?

注意:我不在乎「可瀏覽性」。

+2

您在標題中提出的問題通過規範中的信息自行回答:因爲「字節」在大多數情況下不是可用於分頁的測量單位。而且,由於其他範圍單位可能會被忽略,並且通常可能是一個範圍,所以對於任何應該可以使用符合規範的_any_ HTTP實現訪問的API,它都是不可用的。 – CBroe

回答

2

這裏我從這個問題中輕輕借用的答案歸功於@ptidelContent-Range header - allowed units?

首先,自定義單位在這個草案中提出HTTP/1.1, part 5: Range Requests and Partial Responses

其次,有細微的差別,第一條語句已被用於在第二條語句已經取得了解析目的

range-unit  = bytes-unit | other-range-unit 
    bytes-unit  = "bytes" 
    other-range-unit = token 

做產生HTTP請求。

最後,從Ferenc Mihaly整個註釋完美地總結了情況:

我符合HTTP規範的時候我送[自定義範圍單位],他們符合HTTP時,他們忽略它

WebDAV的正確使用HTTP擴展,國際海事組織,但作品很少在互聯網上正是這種原因

0

你最不希望默認顯示所有項目的時間。使用?p = 2樣式頁面可以保留root /第一頁。用「範圍」標題,這將是一個奇怪的行爲。 HTTP很久以前就變得過度繁忙了,所以我不建議將它的所有頭文件接受爲真理。