我想更新我定义的一个资源(用户)以更新其当前状态(在线/离线)和/或位置。因此我会使用像这样的PUT请求:
PUT http://server/v1/users/12345
有效载荷
{
"status": 0
}
例如,将状态设置为离线。
或者可能是:
有效载荷
{
"latitude": 100,
"longitude": 100
}
后端基于Laravel / PHP,我在控制器中响应此请求:
public function update(Request $request, $userReference) {
// Get payload from request
$bodyContent = json_decode($request->getContent(), true);
$userReference = $userReference;
// Update the user location
$updateResponderLocationCommand = new UpdateResponderLocationCommand($bodyContent);
$this->commandBus->execute($updateResponderLocationCommand);
$response = [
'userReference' => $userReference
];
return $this->setStatusCode(201)->respond($response);
}
此控制器使用我集成的命令系统,它将触发执行更新的任务。
我的问题是,我在哪里挣扎:
PUT http://server/v1/user/100
方法,并在有效负载和选择开关中使用关键字 - 在控制器内部方法区分要执行的任务?答案 0 :(得分:1)
action
上会有json object
属性,该属性与应该发生的功能相对应。让我们看一下:
public function update(....){
switch($request->get('action'))
{
case 'location':
//execute the command here
break;
case 'status':
//execute the command here
break;
}
}
通过这种方式,我们可以确保根据我们的行动调度我们的commands
。这是我喜欢的方法。
关于整个put vs.s.发布 - 因为this question thread here到目前为止有最好的细分和解释,所以没有理由再写一篇文章。
您应该参考#2中的链接。创建资源时,应使用PUT
。这可以确保请求是幂等的,不会重复(客户端挂起,服务器瓶颈等)。