API 网关或特定服务的职责
Responsabilities in API gateway or specific service
我在服务之间划分职责时遇到问题。
示例场景
假设我们减少了以下数量的服务,通过 RabbitMQ 相互通信:
- API 服务。所有业务逻辑的单个 HTTP 入口点。
- 用户服务。处理用户逻辑。
要实现用户创建功能:我应该在 API 还是在用户服务中强制执行业务限制?
例如,如果只有管理员可以创建用户 "isAdmin" 属性 设置为 true,我会想到以下选项:
暂定方案
签入 API 服务
API 服务检查用户是否被授权,如果是,则将操作发送给用户服务。运营为用户服务。
优点:用户服务更灵活。如果其他服务想在以后创建用户时不受限制地执行任何它想做的事情(例如,创建用户时没有 "creator user")。数据也得到了早期验证。
劣势:如果业务逻辑太通用我就得重复多点检查。我有 Users split
的业务逻辑
签入用户服务
用户服务检查授权,returns 错误 API。 API 将该错误传递给客户端。
有什么好的做法吗?你以前遇到过这种困境吗?它是如何工作的?
从Domain driven design
的角度来看,授权应该是一个单独的限界上下文。因此,授权检查应该在 Users administration bounded context
之外进行。因此,在最简单的实现中,您可以使用一些 Api 服务来执行实际检查,从应用层调用。如果当前经过身份验证的用户具有所需的权限(例如 CanCreateNewUsers
),则允许调用 Users administration bounded context
,否则会因错误而被拒绝。
更 complex/DDD 的解决方案是在两个限界上下文之间使用反腐败层。
顺便说一句,我建议您在进行实际检查时使用权限而不是角色。您可以在 Authorization bounded context
.
中使用角色
我在服务之间划分职责时遇到问题。
示例场景
假设我们减少了以下数量的服务,通过 RabbitMQ 相互通信:
- API 服务。所有业务逻辑的单个 HTTP 入口点。
- 用户服务。处理用户逻辑。
要实现用户创建功能:我应该在 API 还是在用户服务中强制执行业务限制?
例如,如果只有管理员可以创建用户 "isAdmin" 属性 设置为 true,我会想到以下选项:
暂定方案
签入 API 服务
API 服务检查用户是否被授权,如果是,则将操作发送给用户服务。运营为用户服务。
优点:用户服务更灵活。如果其他服务想在以后创建用户时不受限制地执行任何它想做的事情(例如,创建用户时没有 "creator user")。数据也得到了早期验证。
劣势:如果业务逻辑太通用我就得重复多点检查。我有 Users split
的业务逻辑签入用户服务
用户服务检查授权,returns 错误 API。 API 将该错误传递给客户端。
有什么好的做法吗?你以前遇到过这种困境吗?它是如何工作的?
从Domain driven design
的角度来看,授权应该是一个单独的限界上下文。因此,授权检查应该在 Users administration bounded context
之外进行。因此,在最简单的实现中,您可以使用一些 Api 服务来执行实际检查,从应用层调用。如果当前经过身份验证的用户具有所需的权限(例如 CanCreateNewUsers
),则允许调用 Users administration bounded context
,否则会因错误而被拒绝。
更 complex/DDD 的解决方案是在两个限界上下文之间使用反腐败层。
顺便说一句,我建议您在进行实际检查时使用权限而不是角色。您可以在 Authorization bounded context
.