我想知道在請求所有記錄時,我的RESTful應用程序的最佳方法是什麼。使用RESTful應用程序請求所有記錄的模式是什麼?
例如,如果沒有提供$ top值以避免超載,我將限制爲10。但是,如何格式化我的請求?好的$ top = allrows或$ top = all ?.我檢查有沒有什麼圖案?
如果沒有提供$ top值,我只能返回10行。
GET /products?$top=
我只是想避免這種情況:提前
GET /products/all
感謝,
Alirio。
我想知道在請求所有記錄時,我的RESTful應用程序的最佳方法是什麼。使用RESTful應用程序請求所有記錄的模式是什麼?
例如,如果沒有提供$ top值以避免超載,我將限制爲10。但是,如何格式化我的請求?好的$ top = allrows或$ top = all ?.我檢查有沒有什麼圖案?
如果沒有提供$ top值,我只能返回10行。
GET /products?$top=
我只是想避免這種情況:提前
GET /products/all
感謝,
Alirio。
沒有官方模式,任何選擇都取決於您的數據大小。
不管你做什麼,總是把的最大限制增加到你將返回的項目數量,而不管客戶端在請求中提供的參數。
另外,創建一個默認計數以在參數未提供信息時返回。
如果您沒有噸要返回的項目,你計數設置您默認計數是最大限制和足以總是返回所有的,你可以只作鏈接不上的特定任何細節計數全部返回。
GET /products (no count/provided)
如果你有數百或數千,你有一個默認計數說100,也許還可以利用的東西明確count
延長該限制(最多當然最大 - 如果要求計數>最大,返回與消息,表明計數400錯誤的請求比最大不能更高)
GET /products?count=1000000
但是,如果持續推動最大極限更高,這可能是可怕的爲您的服務器(S)和/或客戶端和更高。
通常,如果你已經有很多的記錄,你大塊它和使用的計數和偏移把它拉下來的字節大小的塊。還元數據添加到響應對象讓請求者知道當前位置,總的記錄,並供給
小僞碼偏移:
$count = 1000
$offset = 0
While count*offset < total records:
GET /products?count=$count&offset=$offset
$offset = $offset + $count
假設請求中的一個看起來像:
GET /products?count=1000&offset=1000
然後在響應正文你所期望的是這樣的:
{
"result": [
{
"id": "123",
"name": "some product",
"link": "/product/123"
},
... many more products ...
{
"id": "465",
"name": "another product",
"link": "/product/465"
}
],
"meta": {
"count": 1000,
"offset": 1000,
"total_count": 3000,
"next_link": "/products?count=1000&offset=2000",
"prev_link": "/products?count=1000&offset=0",
},
"status": 200
}
如果你真的想要金星,你可以讓你的資源堅持HATEOS(https://en.wikipedia.org/wiki/HATEOAS),並且包含指向列表中單個資源的鏈接,也可以在元中鏈接到列表的下一個和前一個塊,如果你正在走大項目清單。我在上面的json示例中添加了一些示例鏈接。
我會做這樣的:
對所有產品GET /產品
對於某些產品GET /產品/ {ID}
對於篩選或排序的所有產品, 使用GET /產品,但讓客戶端發送請求正文中的Filter對象。 那裏,如果他想在分頁某一頁它可以指定,或過濾一些記錄等
過濾對象可能看起來像: {「PAGENUMBER」:1,「pageSize的」:12,「自由文本」:「」, 「條件」:[],「分類」:{}} 在您的服務中,將其映射到內部服務篩選器並返回請求的記錄。
這將是很好的檢查@Ray答案。 _「無論你做什麼,無論客戶在請求中提供的參數如何,總是對你要返回的物品數量設置**最大限制**。」_ – Alirio
WOW Ray。非常感謝您的詳細解答。這真的有助於我更多地瞭解我應該遵循的方法。 – Alirio