2016-01-21 57 views
0

一些作者说,在REST体系结构中,应该使用POST方法来创建新资源,并且只有PUT方法用于更新现有资源(或创建一个新资源)。 但问题是,PUT方法是幂等的,因此,如果一个资源有一个名为“updatedTime”必须在服务器端的可靠性来设定一个日期字段,更新操作不再幂(因为“updatedTime的价值“会在每个新操作中改变),所以PUT不能被使用,并且POST仅用于创建一个新对象如何解决这个问题?REST中的POST方法必须仅用于创建资源?

+0

没有什么解决。 PUT和POST都可用于创建或更新。通常使用PUT来更新和POST来创建。你的问题不清楚。 – Idos

+0

此信息可能会有所帮助http://stackoverflow.com/questions/2001773/understanding-rest-verbs-error-codes-and-authentication –

+0

我总结我的问题,希望它会更清楚。 如果它说只更新一个资源PUT应该被使用,如果我们必须实现一个非幂等更新方法,如果只有PUT必须被用来进行更新操作,该怎么办? – Belin

回答

0

按照HTTP的definition of idempotent

一样的安全定义,幂等属性只适用于
什么已要求用户;服务器可以自由地分别记录每个请求,保留修订控制历史或实施
对于每个幂等请求
其他非幂等的副作用。

因此,只要不影响HTTP服务器提供的资源,您就可以自由修改底层服务器对象中的更新时间。

如果你担心打破幂等(虽然一个可以辩论是否是一个真正的冲突),因此,我要劝你存储updatedTime在服务器对象场,但只有通过适当的Last-Modified header,而不是揭露它的相关信息将其放入代表资源的响应主体中。

作为一个方面说明,POST不仅是创造资源(见the spec