REST用于更新资源的不同用例

时间:2013-12-11 22:21:55

标签: rest restful-architecture

我想知道什么是RESTful,当我想要更新资源但有多个操作时,每个操作在业务层中都有不同的流程

例如,有3种情况需要更改任务状态(所有这些都将更新任务)

  • 获取
  • 推出
  • 更新

所以我要做的就是做一个PUT:

PUT: Tasks/{taskId}?flag=acquire

我问的原因是因为如果这是有效的,我会做的是:

后端代码中,我将在标志上创建一个条件,基于每个值将完全不同的东西(我不喜欢从代码角度来看),但这是正确的方法,还是有另一种方法从REST角度定义资源?

2 个答案:

答案 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。