2016-02-12 22 views
0

我的數據訪問層支持upsert操作(Spring Data的CrudRepository.save()),當id字段未設置時插入新記錄,並且設置id字段時更新它。在REST中用生成的URI上傳資源(更新或插入)?

我想知道如何辯解創建兩個單獨的REST方法(均在後臺和前臺側)所需的額外的工作:

  • POST /用戶,創建一個新用戶(和生成新創建的資源的URI)
  • PUT /用戶/(編號),用於更新現有用戶

在創建只有一個REST方法:

  • POST /用戶

是否有比更加RESTful的其他兩個不同的方法有什麼好處?

回答

0

支持upsert的數據訪問層並不意味着REST API也應該支持它。我不會超載POST /users有兩個含義。堅持兩種不同的資源。

編輯:

POST /users有「添加一個新的實例資源集合」的一般含義。我看不出有什麼辦法可以將它擴展到'...或者如果給出了一個ID就更新現有的實例'。 /users集合資源,而不是您想要操作的單個資源。對集合資源執行POST應該操作集合,而不是單個現有資源。

+0

你會如何證明這一點?慣例? –

0

將不同的資源用於不同的動作會更清晰。由REST意識形態 - PUT冪等方法和POST不冪等。所以每個POST請求都應該返回新的項目,但是PUT應該返回相同的項目作爲響應。

我認爲這是一個很好的行爲預期。

但是,如果你爲你的API編寫文檔,你可以在資源上使用這兩個操作(但我會選擇第一個選項)。