一千萬個為什麽

搜索

RESTful系統中有一個請求的多條記錄

我見過的關於RESTful架構的所有示例都處理了單個記錄。例如,GET請求 mydomain.com/foo/53 獲取foo 53或POST到 mydomain.com/foo 以創建新的Foo。

但是多條記錄呢?能夠通過id請求一系列Foos或發布一系列新Foo通常會通過單個API請求而不是數十個單獨請求更有效。你會“重載” mydomain.com/foo 來處理單個或多個記錄的請求嗎?或者你會添加 mydomain.com/foo-multiple 來處理多個POST和GET?

我正在設計一個可能需要同時獲取許多記錄的系統(類似於 mydomain.com/foo/53,54,66,86,87 )但是因為我還沒有看到任何這方面的例子,我想知道是否有一些東西,我只是沒有得到一個RESTful架構,使這種方法“錯誤”。

最佳答案

有一個很好的理由不在單個請求中返回多個記錄,它的緩存能力較低,可擴展性較差。無論何時您想知道REST應該如何或為何起作用,請查看網頁。當您請求頁面時,它會關閉到其他資源的鏈接,如多個圖像,css文件,js文件等。

雖然嘗試通過單個請求嘗試並提取所有這些內容似乎更有效,但它更具可擴展性和緩存能力,可以將它們全部視為單獨​​的資源,並允許Web服務器和保持活動連接來處理許多請求資源有效。如果您將所有css,javascript和圖像內聯到可能代表整個頁面的單個下載中,當您訪問需要某些相同資源的另一個頁面時,您必須再次下載它們,因為您沒有正確引用它們作為單個資源,瀏覽器第一次可以緩存。

如果你確實擁有代表多個資源列表的東西,那麽這樣做的另一種方法就是讓列表成為各個資源的URL列表,並分別獲取每個資源,就像在閃爍包含頁面上所有圖像的URL,它不會嘗試將它們全部內嵌到頁面本身。

當資源正確地允許緩存並且單獨引用時,緩存命中率可能會非常高,允許Web服務器處理更多負載並允許客戶端和服務器之間的緩存代理服務器以防止請求甚至不得不命中服務器。使用這種方法網絡運行良好,在認為它聽起來很瘋狂之前,請考慮一下。

轉載註明原文: RESTful系統中有一個請求的多條記錄