【问题标题】:micro service design business and user RestAPI微服务设计业务和用户 Rest API
【发布时间】:2017-12-13 09:12:55
【问题描述】:

我们正在尝试设计特权用户可以创建业务的用例(特权用户是企业所有者)。每个企业可以有多个用户。为了满足这一要求,我们正在考虑创建三个服务 UserAPI、BusinessAPI 和 SubscriptionAPI。 UserAPI 负责用户的创建、删除、更新和查找,同样的业务和订阅 api 也会做类似的操作。

  • /api/v1/users/
  • /api/v1/business/
  • /api/v1/subscription/

对于我们想要为业务创建新用户的场景,我们正在考虑使用 SubscriptionAPI

步骤如下:

  • 业务是否存在“业务API客户端”将用于检查。
  • 将使用“用户 API 客户端”检查给定手机号码的用户是否已存在。
  • 如果上述条件通过,将调用“用户 API 客户端”来创建用户。
  • 以上步骤将提供用户 ID
  • 订阅表 Subscription_id、business_id、user_id 中的新记录

请求

  • POST /api/v1/subscription/business/{id}
  • 请求正文 UserVO

UserVO 在 SubscriptionAPI 中重复 – 这是正确的吗?

另外请分享对所描述的服务设计的看法,可以做哪些改进。

【问题讨论】:

    标签: rest api design-patterns microservices


    【解决方案1】:

    如果您尝试拥有 3 个不同的微服务,那么您可以使用 Zuul 代理。

    Zuul 作为您的服务的 API 网关。它充当您所有服务的看门人。您可以定义自定义 zuul 过滤器,例如 pre、post 等。

    根据您的规范,我建议使用 zuul 预过滤器,在将请求路由到订阅服务之前,请求其他两个服务以获取所需的输入。

    这里有一个链接供参考:
    https://spring.io/guides/gs/routing-and-filtering/

    使用此配置来路由请求:

    zuul:
     prefix: /api/v1
     stripPrefix: false
    proxy:
     stripMapping: false
     mapping: /api/v1
     addProxyHeaders: true
    routes:
    Business-API:
     path: /business/**
     url: http://localhost:8213
     stripPrefix: false
    user-service:
    path: /user/**
    url: http://localhost:8212
    stripPrefix: false
    

    关于请求负载,您可以拥有任何您需要的负载。请记住,所有服务都必须是可独立部署的。这意味着如果您要删除您的业务,您需要决定如何处理您的订阅。级联可能会导致您遇到问题。最好投入更多时间并仔细考虑该领域。如果您的服务彼此之间有太多的依赖关系,最好将它们集群为一个域。

    我已经在这里解释了如何定义您的域:
    DB design for microservice architecture

    【讨论】:

    • 路由不是问题,问题与API(微服务)设计有关。
    • 感谢 Nitish 的回复。问题与我应该如何设计订阅微服务 API 有关。如上所述,用户可以拥有企业(所有者),每个企业可以有多个用户,同样每个用户可以将自己关联到不同的产品(属于订阅企业的产品)。为实现该订阅者 API 用于管理用户与业务的关联以及用户与产品之间的关联。当我们要将新用户与特定业务相关联时,我应该如何为订阅 API 定义 Rest URI。或者这种做法是完全错误的。
    • 您可以使用任何 URI,只要它是唯一可识别的。真的没关系。您在问题中提到的 URI 对我来说看起来不错。(/api/v1/subscription/business/{id}) 只要您不是,您绝对可以在请求有效负载中使用用户对象t 将其与用户服务级联。 (即没有在业务服务中创建用户的服务调用)
    • 对于这种场景的最佳实践是什么,订阅 API 只是持有用户和业务之间的关系以及用户和产品关系之间的关系。对于业务 API 的 /api/v1/business/users/{id} URI 的任何想法都是在用户下创建业务的正确方法。
    • 阿米特,在您设计 MS 时,只有一件事最重要。您应该定义一个域。将所有相关组件聚集在一起并定义一个域。正如我在回答中指定的那样,对我来说,您的使用、业务、订阅服务需要在单个 MS 中。 URI 和有效负载无关紧要。我想我的回答对你有所帮助。如果有,请点赞并接受。如果没有,请发表评论并帮助我更好地帮助您。
    猜你喜欢
    • 2022-06-28
    • 2016-05-19
    • 1970-01-01
    • 2019-09-09
    • 2019-04-09
    • 2019-10-27
    • 1970-01-01
    • 2017-09-21
    • 1970-01-01
    相关资源
    最近更新 更多