存储库应该向RESTful Web API返回什么样的错误代码

本文关键字:返回 API 什么样 错误代码 Web RESTful 存储 | 更新日期: 2023-09-27 17:59:45

当我看到微软关于存储库模式的示例时,它当然是一个完全简单的示例,与现实世界的需求无关-一如既往…-

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

RepositoryAdd/Del/Update方法返回Void-nothing-

另一方面,当有人使用我的RESTful Web API时,我想提供之类的东西

NotFound()如果记录的删除对没有任何作用

OK()如果删除成功

Update方法也是如此。

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

存储库应该向RESTful Web API返回什么样的错误代码

有两个主要选项:

  1. 将像NotFound这样的情况视为特殊情况。指定存储库在不存在要删除的对象的情况下抛出的异常类型。如果选择此选项,那么您可以在Web API层拥有一个非常通用的异常捕获处理程序,该处理程序知道这些异常应该转换为什么类型的响应
  2. 更改存储库接口以返回Optional错误值或Sum Type,表示对该方法的调用的所有可能结果。这需要调用存储库的方法来决定在每个场景中要做什么,但它也允许在处理场景时有更大的灵活性。(例如,如果人员本身不在,您可能希望DeletePerson返回NotFound,但如果在使用不同的存储库清理某些相关数据时不存在数据,您希望使用不同的返回类型吗?)

您应该避免让Repository层返回某种面向HTTP的响应代码。

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

一个"结果对象"。一个简单的版本可能是这样的:

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

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

根据您的需求,您可以使此类变得任意复杂。