我的应用程序交易要求用户在使用服务之前注册并创建应用程序。接口的初步计划如下..。
POST /Users/Applications
-创建应用程序并返回唯一标识符。
GET /Users/Applications/{id}
-检索现有应用程序。
PUT /Users/Applications/{id}
-更新现有的应用程序。
DELETE /Users/Applications/{id}
-删除现有应用程序。
这看起来非常清晰和合乎逻辑,并且充分利用了HTTP谓词。但是,如果我现在需要对一个应用程序执行其他操作,该怎么办呢?
如何构造REST接口以处理此类请求?也许是这样的..。
POST /Users/Applications/{id}/print
POST /Users/Applications/{id}/activate
...for激活我正在改变状态,所以我相信我需要使用POST。我理解REST是关于文档的,但是当我需要对文档执行操作时,如何构造API,而不仅仅是获取和更新文档本身?
发布于 2014-10-06 09:41:09
这 Martin的文章指出:有些人错误地在POST/PUT和create/update之间进行通信。两者之间的选择与此大相径庭。
当我试图在PUT和POST之间做出决定时,我遵循下面的规则:
放置->幂等 后->不幂等
幂等的意思是在执行一个和多个操作之间没有区别。DB数据在第一个操作之后和每个其他操作之后都是相同的。
在非幂等运算的情况下,每个执行的操作都会改变DB中的数据.
这就是为什么PUT通常用于更新操作,POST用于创建。但这不是正确的规则。
回到你的问题,在我看来,你正确地使用帖子作为一个不幂等的行动,因为多个电话到ActivateApplication将发送多个电子邮件。
编辑的
正如@elolos评论的那样,遵循单一响应原则,发送电子邮件应该是另一种响应性,而不是直接链接到更新国家。当属性发生变化时处理事件,以触发进程,如发送电子邮件,将是一种更好的方法。这样,ActivateApplication操作可以是幂等的,并且可以使用PUT Http方法进行调用。
https://stackoverflow.com/questions/26212004
复制相似问题