java Jersey/JAXRS放置、删除程序员提供的或将由程序员完成的幂等性
根据REST,put,delete等是幂等的,也就是说,对一个资源重复执行的操作会产生相同的响应。这是自动完成的(在浏览器上缓存等),还是由程序员完成/确保(在方法中)? 这个幂等性只是象征性的吗
例如,在我处理删除请求的方法中—
@DELETE
@Produces({MediaType.TEXT_HTML})
public Response deleteEmployee() {
String response = DAOaccess.deleteEmployee(name);
return Response.noContent().build();
}
我可以用这种方法做任何事。那么,我必须在这里通过编写这样的代码(检查id
等)来确保幂等性吗
当有人问我put和post之间的区别时,他们是从HTTP的角度问的,而不是从JAX-RS的角度问的(因为JAX-RS中可能没有功能上的区别)
# 1 楼答案
是的,开发者负责确保这里的幂等性。根据标准,PUT和DELETE应该是幂等的,但是对于这意味着什么,有很大的解释空间。JAX-RS在确保开发人员遵循REST最佳实践方面做得相对较少,并且会将每个请求路由到适当的端点,而没有一个过滤器来短路请求
第二个delete调用返回204还是404?如果重复调用同一个方法,则任何一个响应都会使系统处于相同的状态;一个向客户端发出信号,表示没有可删除的资源,另一个向客户端发出信号,表示此时肯定没有此类资源
唯一的错误的实现(根据REST标准)是系统在重复调用时切换资源的已删除状态-这会让客户端不确定下一次调用对系统会产生什么影响