在Agavi框架用来更新信息创建和POST PUT请求。通常在REST这用于周围的其他方法(通常指的是POST加边PUT更换整个数据记录的信息)。

如果我理解正确的话,最重要的问题是,PUT必须幂等,而POST没有这个要求。因此,我wounder如何创建一个新的记录,可以幂等(即多个请求不会导致一个记录的多个创作),特别是当通常的ORM使用一个ID作为主键和一个新记录的ID不知道到客户端(因为它在数据库中自动创建的),因此不能是请求的一部分。如何保持Agavi的幂等的要求在此光用于PUT请求。

感谢。

有帮助吗?

解决方案

PUT既可用于创建和用于更新完整的记录中使用。 POST通常用于局部更新及相关业务以及为不指定URL的资源(例如,POST,以创建一个新的类型的服务器上记录/文章/ 23 /评论返回201个状态和位置:/篇/ 23 /评论/ 283136头)。所以你的情况(有顺序/自动增量ID),你可以使用这种方法。

然而,HTML(因此web表单)是不同的。它只知道GET和POST,而不是用DELETE和PUT。为删除和更新操作,重载POST方法。

这就是为什么Agavi的,默认情况下,映射POST“写”,并获得“读” - 这是最常见的情况,而“读”和“写”被选中,是因为它们是相对中性的,并在某种程度上代表GET的安全方面VS POST(安全如在“GET可称为无副作用”和等等)。

可以改变动词用于factories.xml的AgaviWebRequest实施映射;参考Agavi的用户邮件列表或IRC频道,如果您需要提供帮助的(或要求离开这里)。很多人在IRC频道也十分赞同URL方案设计经验的情况下,你需要让你的API相当多的帮助。

其他提示

相反PUT的思维创造,认为它是“把”的。你把一个资源在一个URI(即发送到URI的整个资源)。

PUT http://example.com/articles/1

如果您重复(发送到相同的URI同整个资源),你会得到相同的结果,你有没有在那个URI改变的资源,这是什么使得它幂等。

如果Agavi的实施PUT的是等幂然后其被正确地执行PUT。否则,它不是这样的。

PUT可用于创建资源,不同之处在于如果资源已经存在(或已经由先前的PUT创建)它只是更新它。 POST也不应当更新资源,如果这是简单的CRUD。需要注意的是HTTP动词没有定义的映射到特定的动作必然的,因为他们的不仅仅是CRUD多了不少管用。

另外请注意,这个问题已经无关REST - 只要正确使用HTTP。所以,请删除REST标签。

我以前有这个问题。这可以通过改变factories.xml来解决

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top