在 Web api 应用程序的不同层传递 HttpStatusCodes
Passing HttpStatusCodes throughout different layers in web api application
我正在编写一个网络 api 应用程序,我将其分为多个项目,例如网络、服务、数据访问 - 所以基本上网络 api 控制器联系服务层,然后可以访问数据访问层。
我 return 只是一个布尔值,让我知道数据访问方法是否已完成,然后在服务层中选择它,然后返回控制器...然后我可以在那里以 200 或 500 等的 HTTPStatusCode 响应。取决于操作是否 returned 为 true 或 false。
使用 HttpStatusCodes 代替 bool 是一种很好的做法...或者 HTTP 状态代码应该只在控制器中使用 - return 对调用网络的应用程序的响应 api 还是应该是别的东西?
谢谢,
模糊的问题,但我会尝试回答。
这真的取决于层与层之间分离的原因,以及每一层所关注的内容。我会问自己的一个问题是为什么要有服务层?是因为它包含业务逻辑吗?是因为意图是可以选择在 WebAPI 上下文之外重用它吗?或者您是否希望服务层依赖于 WebAPI 上下文(即它是一个 Web 请求,而不是在 winform 中被重用的服务。)
很可能,您想将 HTTP 细节的处理限制在控制器(恕我直言,这显然只是我的意见)。但我不会将其用作硬性规定。
首先,classes 应该对周围的世界了解最少。假设您实现 the repository pattern 来获取数据。你的存储库(数据访问层)甚至不应该知道 HTTP,也不应该期望它成为 Web 应用程序的一部分。它唯一关心的是访问特定的 table.
不了解全局很难提出具体的解决方案,但您可以考虑以下几点:
- 如果您的应用程序依赖于无法获取的数据,则引发异常。它将传播为 500 个响应。
- 使用 enum 而不是 bool 使代码更具可读性。
- 创建DataResponse class 来封装数据访问操作的结果。然后,您可以使用 the adapter pattern 使 DataResponse 适应 HttpResponse。
您不应该在线下或在线上传播 HTTP 状态代码。如果你这样做,那么你就是在依赖你努力去耦合的东西。 N 层架构的一大优点是,是的,您的 Web 层可能主要用于与您的服务层交互,但是当您想要连接本机移动应用程序来调用它时会发生什么,或者 windows 服务来调用它,或桌面应用程序来调用它。你基本上是在阻碍它的潜力,因为你试图在链上和链下坚持这个错误。
我正在编写一个网络 api 应用程序,我将其分为多个项目,例如网络、服务、数据访问 - 所以基本上网络 api 控制器联系服务层,然后可以访问数据访问层。
我 return 只是一个布尔值,让我知道数据访问方法是否已完成,然后在服务层中选择它,然后返回控制器...然后我可以在那里以 200 或 500 等的 HTTPStatusCode 响应。取决于操作是否 returned 为 true 或 false。
使用 HttpStatusCodes 代替 bool 是一种很好的做法...或者 HTTP 状态代码应该只在控制器中使用 - return 对调用网络的应用程序的响应 api 还是应该是别的东西?
谢谢,
模糊的问题,但我会尝试回答。
这真的取决于层与层之间分离的原因,以及每一层所关注的内容。我会问自己的一个问题是为什么要有服务层?是因为它包含业务逻辑吗?是因为意图是可以选择在 WebAPI 上下文之外重用它吗?或者您是否希望服务层依赖于 WebAPI 上下文(即它是一个 Web 请求,而不是在 winform 中被重用的服务。)
很可能,您想将 HTTP 细节的处理限制在控制器(恕我直言,这显然只是我的意见)。但我不会将其用作硬性规定。
首先,classes 应该对周围的世界了解最少。假设您实现 the repository pattern 来获取数据。你的存储库(数据访问层)甚至不应该知道 HTTP,也不应该期望它成为 Web 应用程序的一部分。它唯一关心的是访问特定的 table.
不了解全局很难提出具体的解决方案,但您可以考虑以下几点:
- 如果您的应用程序依赖于无法获取的数据,则引发异常。它将传播为 500 个响应。
- 使用 enum 而不是 bool 使代码更具可读性。
- 创建DataResponse class 来封装数据访问操作的结果。然后,您可以使用 the adapter pattern 使 DataResponse 适应 HttpResponse。
您不应该在线下或在线上传播 HTTP 状态代码。如果你这样做,那么你就是在依赖你努力去耦合的东西。 N 层架构的一大优点是,是的,您的 Web 层可能主要用于与您的服务层交互,但是当您想要连接本机移动应用程序来调用它时会发生什么,或者 windows 服务来调用它,或桌面应用程序来调用它。你基本上是在阻碍它的潜力,因为你试图在链上和链下坚持这个错误。