gpt4 book ai didi

rest - 当相关资源属于不同的微服务时,如何处理REST API路径?

转载 作者:行者123 更新时间:2023-12-04 14:56:15 26 4
gpt4 key购买 nike

我有两个微服务:

  • UserService,定义了/users、/users/:id等路径;
  • MessageService,它定义了/messages、/messages/:id 等路径。

  • 此外,MessageService 中的每条消息都有一个属性 user_id,它引用 UserService 中的用户。

    现在,假设我想列出给定用户的所有消息。现在我可以想到以下方法:
  • 路径如 /users/:id/messages 如果我想遵循最佳 REST API 实践,这似乎是最好的方法。但是,在我看来,我无法在 MessageService 中定义这样的路径,因为我会将其与 UserService 紧密耦合。我相信以/users 开头的路径应该只属于 UserService 。
  • /messages?user_id=:id 所以我可以使用现有的/messages 路径并按属性 (user_id) 添加过滤器。不确定是否是一个好习惯。
  • 在微服务前面放一个 API 网关,并从 创建一个代理/users/:id/messages /messages?user_id=:id .这允许客户端使用最 REST 友好的路径,同时保持微服务松散耦合。

  • 这些方法中的哪一个最合适?

    最佳答案

    这个问题没有正确或错误的答案。 IMO,这取决于消息是独立资源还是域逻辑中用户资源的一部分。

    如果消息始终属于单个用户,那么您可以将用户的消息视为消息集合中的子资源或层次划分,我可能更喜欢第一个 URI 方案。在这种情况下,我可能会选择像 /user/:id/messages 这样的路径。而不是复数的“用户”。或者将用户 ID 放在消息后面,例如:/messages/user/:id
    如果邮件本身是您域中的一个实体,或者可以属于多个用户(如电子邮件),则使用查询字符串方案过滤邮件会更有意义。

    关于rest - 当相关资源属于不同的微服务时,如何处理REST API路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38863827/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com