【发布时间】:2016-12-16 06:32:06
【问题描述】:
我有两个微服务:
- UserService,定义了/users、/users/:id等路径;
- MessageService,定义了/messages、/messages/:id等路径。
此外,MessageService 中的每条消息都有一个属性 user_id,它引用 UserService 中的用户。
现在,假设我想列出给定用户的所有消息。目前我可以想到以下几种方法:
- 如果我想遵循最佳 REST API 实践,像 /users/:id/messages 这样的路径似乎是最好的方法。但是,在我看来,我无法在 MessageService 中定义这样的路径,因为我会将它紧密耦合到 UserService。我相信以 /users 开头的路径应该只属于 UserService。
- /messages?user_id=:id 所以我可以使用现有的 /messages 路径并按属性 (user_id) 添加过滤器。不确定是否是一个好的做法。
- 在微服务前面放置一个 API 网关,并创建一个从 /users/:id/messages 到 /messages?user_id=:id 的代理。这允许客户端使用对 REST 最友好的路径,同时保持微服务松散耦合。
以下哪种方法最合适?
【问题讨论】:
标签: rest microservices