首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Rest需要额外的操作--如何构造?

Rest需要额外的操作--如何构造?
EN

Stack Overflow用户
提问于 2014-10-06 07:57:57
回答 1查看 83关注 0票数 0

我的应用程序交易要求用户在使用服务之前注册并创建应用程序。接口的初步计划如下..。

POST /Users/Applications -创建应用程序并返回唯一标识符。

GET /Users/Applications/{id} -检索现有应用程序。

PUT /Users/Applications/{id} -更新现有的应用程序。

DELETE /Users/Applications/{id} -删除现有应用程序。

这看起来非常清晰和合乎逻辑,并且充分利用了HTTP谓词。但是,如果我现在需要对一个应用程序执行其他操作,该怎么办呢?

  • ActivateApplication -一旦所有数据都在系统中使用PUT,我现在希望用户激活他们的应用程序。这不仅仅是使用PUT更新应用程序上的状态的问题,还有几个激活应用程序的附加任务,比如给HR部门发电子邮件。通知他们一份新的申请已经到了。
  • PrintApplication -当从客户端调用时,将应用程序打印到办公打印机。(这不是一个理想的例子,但我敢肯定你有这样的想法!)

如何构造REST接口以处理此类请求?也许是这样的..。

代码语言:javascript
运行
复制
POST /Users/Applications/{id}/print

POST /Users/Applications/{id}/activate

...for激活我正在改变状态,所以我相信我需要使用POST。我理解REST是关于文档的,但是当我需要对文档执行操作时,如何构造API,而不仅仅是获取和更新文档本身?

EN

回答 1

Stack Overflow用户

发布于 2014-10-06 09:41:09

Martin的文章指出:有些人错误地在POST/PUT和create/update之间进行通信。两者之间的选择与此大相径庭。

当我试图在PUT和POST之间做出决定时,我遵循下面的规则:

放置->幂等 后->不幂等

幂等的意思是在执行一个和多个操作之间没有区别。DB数据在第一个操作之后和每个其他操作之后都是相同的。

在非幂等运算的情况下,每个执行的操作都会改变DB中的数据.

这就是为什么PUT通常用于更新操作,POST用于创建。但这不是正确的规则。

回到你的问题,在我看来,你正确地使用帖子作为一个不幂等的行动,因为多个电话到ActivateApplication将发送多个电子邮件。

编辑的

正如@elolos评论的那样,遵循单一响应原则,发送电子邮件应该是另一种响应性,而不是直接链接到更新国家。当属性发生变化时处理事件,以触发进程,如发送电子邮件,将是一种更好的方法。这样,ActivateApplication操作可以是幂等的,并且可以使用PUT Http方法进行调用。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26212004

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档