为什么在WebAPI PUT参数中包含Record Key



在所有ASP。. NET WebAPI的例子,我已经看到实现HTTP PUT方法,记录的键作为一个单独的参数传递给模型更新。例如:

[HttpPut]
public HttpResponseMessage Put(int id, UserEditViewModel model)
{
    // Look up existing record
    User user = await db.Users.FindAsync(id);
    // Apply changes
    // user.Name = model.Name;
    // Commit updated record to data store
    db.SaveChanges();
}

我很好奇为什么使用这种方法而不是定义模型上的键值并简化调用?

public HttpResponseMessage Put(UserEditViewModel model)
{
    // Look up existing record
    User user = await db.Users.FindAsync(model.UserId);
    // Apply changes
    // user.Name = model.Name;
    // Commit updated record to data store
    db.SaveChanges();
}

在大多数情况下,我能想到的视图将需要UserId无论如何,所以我不知道如何/为什么它会从视图的角度复杂的模型,但我相信一定有一个很好的理由。

取决于我们讨论的rest级别,我认为它可能更多的是关于便利性。看看Richardson的成熟度模型第3级,工作流可能是这样的:

GET /api/users/{id}

一旦客户端导航到一个用户,服务器将构建链接uri,用唯一的资源标识符填充它,所以它看起来像这样:

"api:user-edit": {
  "href": "http://apiname:port/api/user/{id}"
},

所以客户端需要输入

PUT /api/users/{id}

具有适当的有效负载(理论上应该是完整的资源,但通常情况下服务器将只选择查看几个字段-几乎像PATCH)。

最新更新