2011-08-26 31 views
0

我正在設計一個爲各種域對象提供CRUD操作的RESTFul服務。一個這樣的對象是Person。帶有URL參數的HTTP POST - 服務器應迴應什麼?

我們有以下服務:

GET /person/list?type=Infant 

與嬰兒型的所有人員作出響應。

POST /person/list 

接受有效載荷中的人員列表並創建這些記錄。

問: 是否有意義的

POST /person/list?type=Infant 

在這種情況下,我們將創建一個有效載荷傳遞的人,然後用型嬰兒的所有人員的名單作出迴應?

最佳做法是什麼?

回答

1

我對此陳述並不舒服:「創建通過有效載荷的人員,然後用所有類型的嬰兒的人員列表作出迴應」。這兩個操作應該分開進行。

+0

謝謝,謹慎講解?我正在嘗試閱讀HTTP規範以及Atom Pub。我找不到任何明確禁止的地方。如果我遵循這種方法,可能遇到什麼問題? – Sam

+0

您可能不會遇到任何問題,但通常客戶端會啓動服務器處理並返回適當響應的請求。在'POST/persons'的情況下,應該創建一個新的條目(人員)。在這種情況下,資源名稱不會在clinet的請求中指定,新的對象URL路徑將返回給您。新條目的ID由服務器創建,通常作爲對此POST操作的響應返回。 POST會創建一個子資源,所以發佈到/ persons創建一個資源位於/ persons資源下,例如/ persons/sam –

1

我認爲/人/列表不適合添加人。如果有的話應該是/人/添加。沒有任何關於REST的具體說明,它禁止你嘗試變得聰明,但是我期望的/ person/add的響應將是add的結果。嘗試移植一些額外的功能只會讓你的客戶(即將使用你的API的人)變得更加複雜。

+0

發佈到/ person/list以添加新個人沒有任何問題。這是非常普遍的慣例。 –

+1

我沒有說它有什麼問題。但是,我認爲這種方法沒有任何價值,REST當然沒有指定使用約定。例如,已經存在很長一段時間的Flickr使用它來上傳照片:http://api.flickr.com/services/upload/。只是因爲你可以做點什麼並不意味着你應該這樣做。 – gview

+1

使用具有動詞的URI的問題在於,它並不總是顯而易見的是請求的語義。例如,GET/person/add會做什麼? –

相關問題