2014-05-02 39 views
1

我從事的是從博客中刮取特定鏈接的服務。該服務打電話到不同的站點,這些站點提供並存儲數據。REST - 獲取更新資源

我有麻煩,指定更新服務器上的數據,我現在使用動詞更新拉動最新的鏈接的數據。

我目前使用以下端點:

GET /user/{ID}/links - gets all previously scraped links (few milliseconds) 
GET /user/{ID}/links/update - starts scraping and returned the scraped data (few seconds) 

什麼是第二個URL一個很好的選擇?我自己提出了一些例子。

GET /user/{ID}/links?collection=(all|cached|latest) 
GET /user/{ID}/links?update=1 
GET /user/{ID}/links/latest 
GET /user/{ID}/links/new 
+0

出了什麼問題的更新請求'/用戶/ /links'? –

+0

只是一個提示:爲了使它更加安寧,你的網址應該說'users'而不是'user' –

+0

小心不要用「update」來描述你想要的內容,否則你的答案不適合你問題。你真的*想要獲得用戶鏈接。這只是你想要選擇最新的和緩存的鏈接。這與[CouchDB中使用的'stale'選項](http://docs.couchdb.org/en/latest/maintenance/performance.html?highlight=stale#views-generation)(一個寧靜的數據存儲)非常相似。所以答案可以是例如'GET/user/{ID}/links'和'GET/user/{ID}/links?cached = true'。 –

回答

4

使用GET啓動進程不是非常RESTful。你並沒有真正獲取信息,而是要求服務器處理信息。您可能希望針對/ user/{ID]/links進行POST(如果您對那裏的優點感興趣,快速的Google PUT vs POST會給您無盡的閱讀體驗)。那麼你有兩種選擇:如果使用的是後臺處理(或隊列),您可以返回一個202所接受,這表明該服務已接受請求,並要做些什麼:

POST與後臺進程。 202通常表示客戶不應該等待,這在執行時間相關的操作(如刮取)時很有意義。客戶端然後可以在第一個鏈接上發出GET請求來檢索更新。

創新使用Last-Modified標題可以告訴客戶端什麼時候有新的更新可用。如果你想成爲超級喜好者,你可以實現HEAD/user/{ID} /鏈接,它將返回一個沒有響應主體的Last-Modified標頭(同時保存帶寬和處理)。

POST直接處理:如果您在請求過程中進行處理(不是一個偉大的計劃),您可以返回一個包含更新鏈接的響應主體的200 OK。

後續的GET會像平常一樣執行。

More info here

And here

And here

+0

感謝您的解釋。使用後臺進程聽起來不錯。如果我想手動添加鏈接怎麼辦? – Boedy

+0

POST:/ user/{id}/links?action = update:會這樣嗎? – Boedy

+0

POST/user/{id}/links?action = update也不完全平靜。我建議創建一個特定於更新操作的端點,例如/用戶/ {ID} /鏈接/更新。這樣,你總是知道你會得到什麼(與POST/user/{id}/links?action = blarg,這是未定義的)。 – jtv4k