使用 ASP.NET Web API 更新 API 请求架构或设计模式的某些字段
Update certain fields from API request architecture or design pattern with ASP.NET Web API
我有一个 API 可以更新已经存在的实体。此实体也可以通过界面手动更新,其中 API 存在。
我的问题是关于如何仅更新供应商可能通过实体上的 API 发送的某些字段的良好设计模式或架构是什么?我不想用 NULL 或空字符串覆盖字段,因为它们在发送到 API 时不知道这些值,但数据库中的实体可能已经具有该字段的值。
如果供应商想要将字段重置为某种空字符串,也应考虑这一点。
实体API模型
ID
Name
TwitterHandle
具有值的实体数据库模型
ID = 200
Name = Hello
TwitterHandle = @hello
实体请求模型发送到 API,值
ID = 200
Name = Hello2
此请求应仅将名称更新为 Hello2,而不要理会 TwitterHandle。但是,在另一个请求中,如果发送了某些内容,他们可以重置 TwitterHandle(NULL,空字符串)
如果你想在 API 水平上做,那么你可以使用下面的 HttpPatch
public void Patch(Guid id, JsonPatchDocument<SomeDto> patch) {
// Perform validation
var objectToUpdate = repo.GetById(id); // replace this with your database call
patch.ApplyUpdatesTo(objectToUpdate);
repo.Save(objectToUpdate); // save it to database
}
我会采用的另一种方法是使用 Automapper。在那里,我将创建 dto 对象和自动映射器映射 class,这会将 dto 转换为数据库模型。这样你也将遵循单一责任原则,因为你的映射将成为自动映射器配置的责任
我们过去做过的一件事是创建一个端点“http://webapi.com/twitter/200/name”,然后执行包含更新值的 put。它并不完美,但它完成了工作并且很容易实施。
我想我找到了 Newtonsoft 的解决方案
JsonConvert.PopulateObject
我有一个 API 可以更新已经存在的实体。此实体也可以通过界面手动更新,其中 API 存在。
我的问题是关于如何仅更新供应商可能通过实体上的 API 发送的某些字段的良好设计模式或架构是什么?我不想用 NULL 或空字符串覆盖字段,因为它们在发送到 API 时不知道这些值,但数据库中的实体可能已经具有该字段的值。
如果供应商想要将字段重置为某种空字符串,也应考虑这一点。
实体API模型
ID
Name
TwitterHandle
具有值的实体数据库模型
ID = 200
Name = Hello
TwitterHandle = @hello
实体请求模型发送到 API,值
ID = 200
Name = Hello2
此请求应仅将名称更新为 Hello2,而不要理会 TwitterHandle。但是,在另一个请求中,如果发送了某些内容,他们可以重置 TwitterHandle(NULL,空字符串)
如果你想在 API 水平上做,那么你可以使用下面的 HttpPatch
public void Patch(Guid id, JsonPatchDocument<SomeDto> patch) {
// Perform validation
var objectToUpdate = repo.GetById(id); // replace this with your database call
patch.ApplyUpdatesTo(objectToUpdate);
repo.Save(objectToUpdate); // save it to database
}
我会采用的另一种方法是使用 Automapper。在那里,我将创建 dto 对象和自动映射器映射 class,这会将 dto 转换为数据库模型。这样你也将遵循单一责任原则,因为你的映射将成为自动映射器配置的责任
我们过去做过的一件事是创建一个端点“http://webapi.com/twitter/200/name”,然后执行包含更新值的 put。它并不完美,但它完成了工作并且很容易实施。
我想我找到了 Newtonsoft 的解决方案
JsonConvert.PopulateObject