Microservices 如何定义API网关URL时,分裂成微服务的整体

Microservices 如何定义API网关URL时,分裂成微服务的整体,microservices,netflix-zuul,api-gateway,Microservices,Netflix Zuul,Api Gateway,我们正在将一个整体式应用程序拆分为微服务。这将是一个渐进的过程,这意味着最初我们将从2个微服务开始,之后我们将把它们分成更多的微服务,以此类推 monoligh公开了一个RESTAPI,它提供了管理数十个不同实体(例如用户、用户类型、角色、角色类型等)的方法。由monolith公开的RESTAPI只有一个使用者——一个Javascript前端应用程序 我们目前正在研究如何配置API网关(Zuul)的两种可能性: URL将包含微服务名称,例如,/api/dictionary将服务于/api/dic

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

monoligh公开了一个RESTAPI,它提供了管理数十个不同实体(例如用户、用户类型、角色、角色类型等)的方法。由monolith公开的RESTAPI只有一个使用者——一个Javascript前端应用程序

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

  • URL将包含微服务名称,例如,
    /api/dictionary
    将服务于
    /api/dictionary/user\u类型
    /api/dictionary/role\u类型
    ,而
    /api/data
    将服务于
    /api/data/users
    /api/data/roles
    。这意味着随着我们创建更多的微服务,URL将随着时间的推移而改变。每次我们这样做,消费者(前端)将不得不改变

  • URL将基于实体名称,例如
    /api/users
    /api/user\u类型
    /api/roles
    /api/role\u类型
    。缺点是Zuul配置必须包含系统管理的每个实体的显式配置


  • 以上哪一种方法是正确的?

    曼美的说法是正确的。你应该采用第一种方法来获得长期收益。 如果您仍然需要另一种方法,那么您可以将这两种方法结合起来,通过配置API网关,它将路由您的请求

    • /api/users->/api/data/users
    • /api/用户类型->/api/字典/用户类型
    • /api/角色->/api/数据/角色
    • /api/角色类型->/api/字典/角色类型

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

    我建议使用第一种方法,因为它可以让您轻松地从url本身识别微服务。其次,维护新端点的服务注册中心的工作量将减少。可能是第二种方法将帮助您在消费者方面没有或很少的更改,因为他们不必更改URL。但从短期来看,第二种方法很好,但从长期来看,我认为第一种方法更好。你不是从问题中描述了第二种方法吗?@AdamSiemion,你说的第二种方法与我提出的不同。在客户端,您将使用“api/用户”url。将网关配置为客户端向该url发出请求,然后该请求将转发到“/api/data/users”,而“/api/data/users”只是您的微服务url。这意味着即使您的微服务url发生更改,您也不必对客户端代码进行任何更改。您只需在网关中更新相应的映射。