.net 是否需要为客户端和管理部分分离API

.net 是否需要为客户端和管理部分分离API,.net,api,architecture,.net,Api,Architecture,我正在考虑下面的任务。在我的项目中,我有两个部分: 1) Android客户端使用的API 2) 后台办公室(管理部分) 我的想法是将这两个API彼此分离。“分离”是指所有服务和数据库层对于客户端API和管理API都应该是唯一的 项目的结构将如下所示: MyProject.FrontOffice.API MyProject.FrontOffice.Services MyProject.FrontOffice.Data MyProject.BackOffice.API MyProject.Back

我正在考虑下面的任务。在我的项目中,我有两个部分:

1) Android客户端使用的API
2) 后台办公室(管理部分)

我的想法是将这两个API彼此分离。“分离”是指所有服务和数据库层对于客户端API和管理API都应该是唯一的

项目的结构将如下所示:

MyProject.FrontOffice.API
MyProject.FrontOffice.Services
MyProject.FrontOffice.Data

MyProject.BackOffice.API
MyProject.BackOffice.Services
MyProject.BackOffice.Data

两个项目都在一个解决方案中,但问题是相当大的一部分代码将在两个部分中重复

第二个想法是不要将其分离,而是使用负载平衡器来解决它(它将在多个API实例之间实现平衡;一些用于客户端,一些用于管理部分)


您认为哪种方法更好?为什么?

API代码应该集中,因为这是将业务逻辑保持在一个集中层而不是保持在两个不同位置的最佳方法

如果在一个API项目中更改了逻辑,那么在两个项目中保持它们的重复将使解决方案更容易从同一个API中得到不一致的结果,但由于人类的倾向,它可能在另一个项目中丢失或以不同的方式实现

强烈建议通过API端点公开单个业务逻辑层。

这是事实

您不应该根据客户的角色分离API

原因很简单。最终会出现代码重复、不一致和许多其他问题

如果您想进行任何分离,您需要考虑业务域和封装

例如:

  • MyProject.ProductsApi
  • MyProject.OrderingApi
  • MyProject.PaymentApi
  • 等等
提供给用户和管理员的功能必须根据客户端的访问和权限来确定。例如,根据与请求一起使用的身份验证令牌,api可以确定该用户是否有权访问此功能

但是,在某些情况下,您希望在多个位置部署相同的API(相同的逻辑和代码)。例如,如果您对为API提供服务而配置的资源有限制,并且在高峰时间,您的客户端将导致API运行缓慢或无法访问,那么您可能不希望您的后台办公室遇到同样的问题,并且无论发生什么情况,它们都应始终保持正常运行。因此,您需要进行一次云部署和一次内部部署


此外,还涉及其他因素,如安全度量、速率限制、攻击、监视等,这些因素应该由其他工具管理,而不是通过分离/复制API代码来管理。

如果您能描述您期望从这种分离中获得的好处,那将很有帮助。显然,代码复制并不是你所认为的一种好处——有些人可能认为是这样,因为它可以让前台和后台分开发展。那么,这是什么呢?API会共享完全相同的代码和功能吗?还是会有一组管理端点和一组执行不同操作的面向客户机的端点?一些API的方法将被复制,但有些方法将仅用于管理部分。我的意思是,在客户端API中提供API的方法是一种不错的做法,这种方法永远不会被使用,cliet也不应该知道。如果API的用途不同,我可能会为了扩展的好处将它们分开——如果您需要更多的实例来处理客户端请求,您不希望被迫公开一些永远不会在某些实例上使用的管理API,反之亦然。尽管如此,权衡的结果是您可能会得到一些重复的代码——这两种选择都有优点。你必须决定你最愿意忍受哪种痛苦。