我想知道什么是RESTful,当我想要更新资源但有多个操作时,每个操作在业务层中都有不同的流程
例如,有3种情况需要更改任务状态(所有这些都将更新任务)
所以我要做的就是做一个PUT:
PUT: Tasks/{taskId}?flag=acquire
我问的原因是因为如果这是有效的,我会做的是:
在后端代码中,我将在标志上创建一个条件,基于每个值将完全不同的东西(我不喜欢从代码角度来看),但这是正确的方法,还是有另一种方法从REST角度定义资源?
答案 0 :(得分:1)
鉴于我并不真正理解你的触发事件在这种情况下是什么(在你的设计范围内“获取”意味着什么?)我将给你一个真实的例子。
将RESTful方法视为如此:
/what?property=value
想象{taskid}
存在以下数据:
{
"status":"dormant",
"owner":"user1"
}
根据定义,PUT
是更新。因此,在您的情况下,您可以输出以下JSON有效负载,如:
PUT: tasks/{taskid}
{
"status":"initiated",
"running_tasks": [
"item1",
"item2",
"item6"
],
"notify": [
"user1",
"user8"
]
}
会对数据产生以下影响:
{
"status":"initiated",
"running_tasks": [
"item1",
"item2",
"item6"
],
"notify": [
"user1",
"user8"
]
"owner":"user1"
}
如果您希望我加入Acquire,Release&在这个例子中更新,请详细说明您的流程是什么样的以及?flag=acquire
实际会做什么。
答案 1 :(得分:1)
我正在尝试稍微阅读这些内容,但在我看来,您希望对任务资源执行操作,而不仅仅是为它们分配状态。因此,这将在POST方面实施。但是,您不希望重载POST以表示同一资源上的不同内容。为此,您可以使用“控制器”资源。
例如,要获取任务(例如,对于工作人员“声明”任务并开始执行它),工作人员可以POST到/ tasks / allocator,其中有效负载指定工作人员想要的任务的URI声明(可能没有有效载荷,分配器可以根据队列中的位置,优先级等分配一个)。这会产生改变任务状态的副作用(例如,将状态更改为“进行中”,记录工作人员的ID,开始时间等)。
如果您只是更改其状态,则更新正在进行的任务可能是一个PUT。如果您正在做一些更复杂的事情,那么可以POST到不同的控制器资源。
如果您只是更改其状态(例如,清除分配的工作人员ID,更改其状态,记录完成时间),则释放任务也可以是PUT。或者,如果有更多的控制器资源,它可能是另一个控制器资源的POST。