我正在使用Web API实现RESTful服务。该服务负责管理产品。可以创建,删除和更新产品。这是我当前的Web API控制器:
[Route("api/[controller]")]
public class ProductsController : Controller
{
private readonly IProductService _productService;
public ProductsController(IProductService productService)
{
this._productService = productService;
}
[HttpGet("{id}", Name = "GetProductById")]
public IActionResult Get(int id)
{
return this.Ok(this._productService.Get(id));
}
[HttpPost]
public IActionResult Post([FromBody] Product product)
{
var newProductId = this._productService.Add(product);
var routeValues = new
{
controller = "Products",
id = newProductId
};
return this.CreatedAtRoute("GetProductById", routeValues, null);
}
[HttpPut("{id}")]
public IActionResult Put(int id, [FromBody] Product product)
{
this._productService.Edit(product);
return this.Ok();
}
[HttpDelete("{id}")]
public IActionResult Delete(int id)
{
this._productService.Delete(id);
return this.Ok();
}
}
出现了新的要求,根据具体情况,产品会根据以下任一流程进行更新:
我的理解是PUT请求满足第2点。但是第1点呢?它应该作为PUT还是POST请求实现?我认为它应该是一个PUT请求,因为从消费的角度来看,产品正在更新,即使在幕后创建了新记录。
如果我将它作为PUT实现,那么我的控制器中的Put
方法是否应该返回产品的id,以满足上面的第1点(因为新产品版本有新的ID)?或者我应该创建两个单独的方法来满足上述每一点?