根据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中可能没有功能差异)?
答案 0 :(得分:1)
是的,开发人员有责任确保此处的幂等性。根据标准,PUT和DELETE 应该<幂>是幂等的,但是对于这意味着什么有充分的解释空间。 JAX-RS确保开发人员遵循REST最佳实践并且将每个请求路由到适当的端点,而没有将请求短路的过滤器。
第二次删除调用是返回204还是404?在重复调用同一方法的情况下,任一响应都会使系统处于相同的状态;一个信号通知客户端没有可以删除的资源,另一个信号通知客户端此时肯定没有这样的资源。
唯一的错误的实现(根据REST标准)将是系统在重复调用时切换资源的已删除状态 - 这将离开客户端不确定下次通话对系统会产生什么影响。