在REST中使用DELETE请求不是纯粹删除

时间:2017-05-20 14:24:45

标签: java spring rest

我在Spring中设计REST API时遇到了两难。

场合

有DELETE请求通过调用DELETE: /v1/api/users/{userId}来删除用户,但它不是纯粹的用户删除,我必须在删除之前将用户票据重新分配给另一个活动用户。

用户A有5张票,当我删除用户A时,他/她的所有票据将被重新分配给另一个选定的用户,然后用户A将从系统中删除。

我的初步建议

我使用最简单的解决方案

DELETE: /v1/api/users/{userIds}

还有以下内容接受id重新分配

@RequestBody int assigneeId

我的困境

我的直觉告诉我,这不是设计DELETE请求API的好方法,删除应该只做删除应该做的事情,我想了很长时间,但无法找到一个优雅的方法来做到这一点。有任何想法吗?

1 个答案:

答案 0 :(得分:2)

让我们假设您有与用户相关的案例。

我会建立一个像这样的休息API:

GET    /v1/api/user            : Return all users
GET    /v1/api/user/{id}       : Return a user
POST   /v1/api/user            : Add a user
PUT    /v1/api/user/{id}       : Update a user
DELETE /v1/api/user/{id}       : Delete a user
GET    /v1/api/user/{id}/case  : Get user's cases
PUT    /v1/api/user/{id}/case  : Reassign user's cases to another user [{id}]

如果客户拨打 DELETE / v1 / api / user / {id} ,则此用户已将案例分配给他。您可以返回HTTP code 409 CONFLICT,表示由于继承的对象而无法删除。 客户必须 PUT / v1 / api / user / {id} / case 才能将这些案例与其他人联系起来。