将整体拆分为微服务时如何定义 API 网关 URL

How to define API gateway URLs when splitting a monolith into microservices

我们正在将单体应用程序拆分为微服务。这将是一个渐进的过程,这意味着最初我们将从 2 个微服务开始,然后我们将它们拆分成更多,依此类推。

monoligh 公开了一个 REST API,它提供了管理数十个不同实体(例如用户、user_types、角色、role_types 等)的方法。只有一个 REST API 的消费者被单体暴露 - 一个 Javascript 前端应用程序。

我们目前正在研究如何配置 API 网关 (Zuul) 的两种可能性:

  1. URL 将包含微服务名称,例如/api/dictionary 将服务于 /api/dictionary/user_types/api/dictionary/role_types,而 /api/data 将服务于 /api/data/users/api/data/roles。这意味着随着我们创建更多微服务,URL 会随着时间而改变。每次我们这样做时,消费者(前端)都必须改变。

  2. URL 将基于实体名称,例如/api/users/api/user_types/api/roles/api/role_types。缺点是 Zuul 配置必须包含系统管理的每个实体的显式配置。

以上哪种做法是正确的?

Manmay说的很对。您应该采用第一种方法以获得长期收益。 如果你仍然想要替代方案,那么你可以通过配置你的 API 网关来结合这两种方法,它将路由你的请求

  • /api/users -> /api/data/users
  • /api/user_types -> /api/dictionary/user_types
  • /api/roles -> /api/data/roles
  • /api/role_types -> /api/dictionary/role_types

通过这种方法,您不必担心维护或客户端更改等任何问题。