将整体拆分为微服务时如何定义 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) 的两种可能性:
URL 将包含微服务名称,例如/api/dictionary
将服务于 /api/dictionary/user_types
和 /api/dictionary/role_types
,而 /api/data
将服务于 /api/data/users
和 /api/data/roles
。这意味着随着我们创建更多微服务,URL 会随着时间而改变。每次我们这样做时,消费者(前端)都必须改变。
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
通过这种方法,您不必担心维护或客户端更改等任何问题。
我们正在将单体应用程序拆分为微服务。这将是一个渐进的过程,这意味着最初我们将从 2 个微服务开始,然后我们将它们拆分成更多,依此类推。
monoligh 公开了一个 REST API,它提供了管理数十个不同实体(例如用户、user_types、角色、role_types 等)的方法。只有一个 REST API 的消费者被单体暴露 - 一个 Javascript 前端应用程序。
我们目前正在研究如何配置 API 网关 (Zuul) 的两种可能性:
URL 将包含微服务名称,例如
/api/dictionary
将服务于/api/dictionary/user_types
和/api/dictionary/role_types
,而/api/data
将服务于/api/data/users
和/api/data/roles
。这意味着随着我们创建更多微服务,URL 会随着时间而改变。每次我们这样做时,消费者(前端)都必须改变。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
通过这种方法,您不必担心维护或客户端更改等任何问题。