我一直在努力解决通过REST API表示结账/签到系统的问题。
为了给你一个小例子我们的系统处理节点,我们需要一种方法让一个用户能够锁定这个节点,然后对它进行更改,然后提交它。
所以我在想像
这样的东西/nodeId
(这是节点的基本位置,并在节点的修订版只读视图中提供最新检查)/nodeId/edited
(发布到此处会创建一个已修改的doc文档,这是checkout,gettting获取已编辑的版本,并且put会进行更改)现在我想代表checkin,我很想说再次发送到/nodeId/edited
将提交已编辑的文档,但后来我们发布了两个截然不同的意思。我可以创建另一个签入端点,但这看起来很混乱?另一种选择是对/ nodeId进行POST,它会创建编辑后的版本,但这看起来很混乱。
答案 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中一样。你操纵资源,不要调用方法。