存储库 return 到 RESTful Web API 应使用哪种错误代码

What kind of error codes should a repository return to a RESTful Web API

当我查看有关 存储库模式的 Microsoft 示例时 它当然是一个完全简单的示例,与现实世界的要求无关 - 一如既往...-

http://www.asp.net/mvc/overview/older-versions/getting-started-with-ef-5-using-mvc-4/implementing-the-repository-and-unit-of-work-patterns-in-an-asp-net-mvc-application

存储库 Add/Del/Update 方法 return 无效 - 无 -

另一方面,当有人使用我的 RESTful 网站时 API 我想提供类似

的东西

NotFound()如果删除记录没有做任何事情

OK()如果删除成功

更新方法相同。

您在现实世界的项目中使用什么作为存储库的 return 类型来让调用者知道真正发生了什么?

有两个主要选项:

  1. 将 NotFound 之类的情况视为例外情况。指定在您要删除的对象不存在的情况下您的存储库将抛出的异常类型。如果你选择这个选项,那么你可以在 Web API 层有一个非常通用的异常捕获处理程序,它知道这些异常应该转换成什么样的响应。
  2. 将存储库接口更改为 return 一个 Optional error value or a Sum Type 表示调用该方法的所有可能结果。这需要调用存储库的方法来决定在每个场景中做什么,但它也允许更灵活地处理场景。 (例如,如果这个人本身不存在,你可能希望 DeletePerson 到 return NotFound,但是如果当你使用不同的存储库清理一些相关数据时没有数据存在,你想使用不同 return 类型?)

您应该避免的是存储库层return某种面向 HTTP 的响应代码。

What do you use in your real world projects as return types for your repositories to let the caller know what really happened?

一个"result object"。一个简单的版本可能是这样的:

public class RepositoryActionResult
{
    public int RecordsAffected { get; set; }        
}

然后您可以从您的存储库方法中设置它并适当地处理调用代码的结果,而不使用控制流的异常。

您可以根据需要将此 class 设置得尽可能复杂。