我已經編寫了自己的Restful API,並且想知道處理從API返回的大量記錄的最佳方法。Restful API - 處理大量數據
例如,如果我使用GET
方法來myapi.co.uk/messages/
,這將爲所有郵件記錄帶回XML,在某些情況下可能爲1000。這使得使用API非常緩慢。
任何人都可以提出處理這個問題的最好方法嗎?批量返回結果並在請求中指定批量大小是否標準?
我已經編寫了自己的Restful API,並且想知道處理從API返回的大量記錄的最佳方法。Restful API - 處理大量數據
例如,如果我使用GET
方法來myapi.co.uk/messages/
,這將爲所有郵件記錄帶回XML,在某些情況下可能爲1000。這使得使用API非常緩慢。
任何人都可以提出處理這個問題的最好方法嗎?批量返回結果並在請求中指定批量大小是否標準?
您可以更改API以包含其他參數以限制應用程序返回的數據範圍。
例如,您可以添加limit
和offset
參數來獲取一小部分。這是如何根據REST進行分頁的。像這樣的請求將導致從21日到30日從消息收集中獲取10個資源。這樣,您就可以要求一個巨大的數據集的特定部分:
myapi.co.uk/messages?limit=10&offset=20
另一種方式來降低有效載荷是隻問你的資源表示的某些部分。這裏的Facebook是怎麼做的:
/joe.smith/friends?fields=id,name,picture
請記住,在使用這些方法之一,您必須提供客戶發現彼此的資源的一種方式。你不能假設他們只是看參數,並開始改變它們來搜索數據。這將違反REST模式。爲他們提供必要的超鏈接以避免它。
我強烈建議通過apigee查看this presentation on RESTful API design(該屏幕錄像被稱爲「教狗到REST」)。那裏討論了處理日常問題的良好做法和整潔的想法。
編輯:視頻已更新了很多次,因爲我張貼了這個答案,你可以檢查出3rd edition from January 2013
這是非常有幫助,謝謝。 – LeeTee 2012-07-31 10:32:50
鏈接的表示很酷:嚴格和信息性 – kiedysktos 2016-12-12 14:24:19
@toniedzwiedz讓我們假設服務器有20個資源時,客戶端使用限制10和偏移量0獲取前10個資源,並且在發送另一個請求以獲取剩餘資源(如果其中少數被刪除)之前(1到5 ),那麼客戶端如何在此方法中獲取第11到第15個資源?因爲在下一次訪存中客戶端應該從偏移量10請求,所以它會錯過第11到第15的數據權。如果沒有客戶端跟蹤已刪除的資源,是否有另一種更好的解決方法? – thavasidurai 2017-10-12 06:45:04