【问题标题】:Jersey/JAX-RS put, delete idempotency - provided or to be done by the programmerJersey/JAX-RS put、delete 幂等性 - 由程序员提供或由程序员完成
【发布时间】:2018-01-10 07:33:59
【问题描述】:

根据 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 中可能没有功能差异)?

【问题讨论】:

    标签: java rest web-services http jersey


    【解决方案1】:

    是的,开发者负责确保这里的幂等性。根据标准,PUT 和 DELETE 应该是幂等的,但是对于这意味着什么,还有很多解释空间。 JAX-RS 在确保开发人员遵循 REST 最佳实践方面所做的工作相对较少,并且会将每个请求路由到适当的端点,而没有使请求短路的过滤器。

    第二个删除调用返回 204 还是 404?给定对相同方法的重复调用,任一响应都会使系统处于相同状态;一个通知客户端没有资源可以删除,另一个通知客户端此时肯定没有这样的资源。

    唯一的错误实现(根据 REST 标准)是系统在重复调用时切换资源的已删除状态 - 这将离开客户端不确定它的下一次调用会对系统产生什么影响。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-18
      • 2010-11-15
      • 1970-01-01
      相关资源
      最近更新 更多