CRUD 中的业务逻辑 RESTful API

Business Logic in CRUD RESTful API

总结

我想阻止被标记为垃圾邮件发送者的用户在我的应用程序上发送消息。 Messaging API 是否应该验证发送用户不是垃圾邮件发送者(从而返回 400)?还是来电者的责任?

架构:

详情

有几个应用程序和一个网站使用 CRUD RESTful API,其中有两个,一个用于用户,一个用于消息。

争论的焦点是消息的调用者 API 是否负责验证用户的垃圾邮件状态。

消息传递的优点API 进行验证:

消息传递的缺点API 进行验证:

想法?

业务逻辑总是使服务混乱。有些人通过将业务服务与 infrastructure/data 服务分开来解决这个问题。不幸的是,当单个基础设施数据服务导致许多业务服务发生变化时,这似乎只会让事情变得更加复杂。

不要分发您的业务逻辑。保留一个服务不值得"clean"。此 "clean" 实现纯属虚构。您已经与其他服务有很多耦合,只是您没有那样考虑它们。我保证您依赖 SMTP 或 MQ 服务来发送消息。它们只是不是您编写的服务。

我会像封装任何其他数据访问(如数据库)一样封装您对用户服务的访问。将其包装在 DAO 或存储库模式中。届时,您可以评估是否遇到了性能问题,如果是,则为您的用户实施一个缓存层来解决它。

你可以考虑第三种选择。您写道:

The caller often already has the user profile available.

您可以要求每个消息 API 请求包含用户个人资料。然后,消息 API 可以在不调用用户 API.

的情况下检测垃圾邮件发送者

优点:

  • 统一执行业务逻辑。
  • 维护更容易:一个地方,而不是三个。
  • 消息 API 和用户 API 保持断开连接。
  • 消息 API 性能没有受到显着影响。

缺点:

  • 客户端必须始终将每个请求中的用户配置文件发送到消息 API(实现起来更复杂,消息 API 请求被与请求目的不直接相关的数据污染)
  • 还没有用户配置文件的客户必须向用户执行额外请求 API。

我并不是说这个选项是最好的,它只是要考虑的另一个候选者。哪个选项最好取决于每个赞成和反对论点的权重。您和您的团队成员应该判断哪些方面对您的组织和您的具体情况最重要。