有多个集合,每个集合都可以通过唯一ID进行标识。每个集合都有多个人,每个人都可以通过其员工ID进行识别。显然,一个人不能两次在同一个集合中。
我需要用给定集合中的新人替换给定的人。
是否应使用两个端点完成此操作:
DELETE /collections/123/employees/321
POST /collections/123 {"employeeId": 222}
或者可以用一个来完成:
PUT /collections/123/employees/321 {"employeeId": 222}
答案 0 :(得分:0)
PUT应为idempotent:
如果在将服务器保持相同状态的情况下,可以在连续一次或多次执行具有相同效果的相同请求时,HTTP方法是幂等的。换句话说,幂等方法不应该有任何副作用(除了保持统计数据)。正确实现,GET,HEAD,PUT和DELETE方法是幂等的,但不是POST方法。
如果你打电话,后端会发生什么:
PUT /collections/123/employees/321 {"employeeId": 222}
PUT /collections/123/employees/321 {"employeeId": 222}
PUT /collections/123/employees/321 {"employeeId": 222}
PUT /collections/123/employees/321 {"employeeId": 222}
如果321记录不再存在,应该如何处理?如果新的employeeId已经存在,应该如何处理?
从逻辑上讲,对我来说,将它们作为两个单独的调用(删除旧成员,添加新成员)更有意义。虽然可以在PUT请求中处理此问题,同时保持请求是幂等的,但潜在用户不太清楚此调用的预期功能是什么。