我在Spring中设计REST API时遇到了两难。
场合
有DELETE请求通过调用DELETE: /v1/api/users/{userId}
来删除用户,但它不是纯粹的用户删除,我必须在删除之前将用户票据重新分配给另一个活动用户。
用户A有5张票,当我删除用户A时,他/她的所有票据将被重新分配给另一个选定的用户,然后用户A将从系统中删除。
我的初步建议
我使用最简单的解决方案
DELETE: /v1/api/users/{userIds}
还有以下内容接受id重新分配
@RequestBody int assigneeId
我的困境
我的直觉告诉我,这不是设计DELETE请求API的好方法,删除应该只做删除应该做的事情,我想了很长时间,但无法找到一个优雅的方法来做到这一点。有任何想法吗?
答案 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 才能将这些案例与其他人联系起来。