我一直在寻找最佳实践,以防止在使用POST创建新资源时意外创建重复资源,这是因为资源将由服务器命名,因此PUT无法使用。我正在构建的API将被移动客户端使用,我关心的情况是客户端在提交POST请求后但在获取响应之前断开连接。我发现this question,但没有提到使用条件POST,因此我的问题。REST:防止通过条件POST创建重复资源?
正在对父资源执行条件POST,类似于使用条件PUT修改资源,这个问题的合理解决方案?如果不是,为什么不呢?
客户机/服务器交互将是一样与条件PUT:
客户端获取父资源,包括ETag的反映其当前状态(其中包括它的从属资源),
客户端执行有条件POST父资源(包括在If-Match头父母的ETag值)来创建一个新的资源,
客户端获取得到之前断开服务器响应,所以不知道它是否成功,
之后,重新连接时,客户重新提交相同的条件POST请求,
无论是早先的要求,没有达到服务器,因此服务器创建资源并用201回复,或者更早的请求确实到达服务器,所以服务器回复412并且不创建重复资源。
如果另一个客户端在两者之间执行GET/POST对,这是否意味着GET/POST对将会失败?这可能是高流量情况下的一个问题。 – geon 2013-05-02 15:49:48
@geon您说得对,但所讨论的集合资源是用户特定的,而不是全局的,因此这种冲突的可能性很小。 – 2015-03-03 07:55:44