如何在REST系统中表示签入/签出?

时间:2012-09-07 10:36:30

标签: rest

我一直在努力解决通过REST API表示结账/签到系统的问题。

为了给你一个小例子我们的系统处理节点,我们需要一种方法让一个用户能够锁定这个节点,然后对它进行更改,然后提交它。

所以我在想像

这样的东西
  • /nodeId(这是节点的基本位置,并在节点的修订版只读视图中提供最新检查)
  • /nodeId/edited(发布到此处会创建一个已修改的doc文档,这是checkout,gettting获取已编辑的版本,并且put会进行更改)

现在我想代表checkin,我很想说再次发送到/nodeId/edited将提交已编辑的文档,但后来我们发布了两个截然不同的意思。我可以创建另一个签入端点,但这看起来很混乱?另一种选择是对/ nodeId进行POST,它会创建编辑后的版本,但这看起来很混乱。

1 个答案:

答案 0 :(得分:2)

使用部分文档POST锁定/签出资源/nodeId{"locked":"true"}。服务器必须处理资源状态并检查资源是否可以被锁定等。如果锁定被锁定,服务器可以回答204 No Content,如果锁定不可能,则可以回答409 Conflict

使用部分文档POST解锁/签入锁定的资源/nodeId{"locked":"false", "someKey":"someValue", ...}。服务器必须处理资源状态,检查资源是否已锁定,并使用POST ed数据更新它。同样,如果解锁成功,服务器可以回答204 No Content,如果没有,则回复409 Conflict

编辑添加了可能的HTTP状态代码。

编辑2: REST中没有“端点”,就像在SOAP中一样。你操纵资源,不要调用方法。