多个 API 上的相似端点

Similar Endpoints on multiple API's

假设我有几个 API 设置为微服务。一个API是管理用户(用户API),看起来像:

/users                 GET, POST
    /{id}              GET, PUT, DELETE

然后还有一个API用来管理安全信息(访问角色,权限等),在用户API中创建的一个user可以赋值在安全 API 中定义的 group。该关联应该在安全微服务中还是在用户微服务中进行?

我最初的想法是在安全微服务中,因为所有应用程序都会从​​那里请求安全信息。有了这个,一个 user 只能分配给一个 group,然后我想出了端点:

/users/{id}/group      GET, POST, DELETE

但是那个端点感觉它更属于用户微服务。其他可供选择的端点是:

/groups/{id}/users     GET, POST, DELETE
                /{id}  GET, DELETE

但是这样一来似乎 user 可以分配给多个组。但是,我可以设计它,以便当 user 关联到 group 时,它将它与之前关联的 group 解除关联。

最好的选择是什么,或者是否有更好的方法来处理我不知道的这些类型的 api 调用?

我想没有 'right' 必然的方法。这是我的处理方式。

基于:

However, I could design it so that when a user is associated to a group, it disassociates it from a group that it was previously associated with.

/groups/{id}/users     GET, POST, DELETE
                /{id}  GET, DELETE

此端点会导致一些问题,因为 Id 会发生变化,因此您必须更改在用户切换到其他组后调用的 url。所以连续的调用需要转到一个新的端点。

例如:/groups/1/users/1可能是有效的一瞬间,但当用户移动组时/groups/1/users/1将不再是return结果。它现在变成 /groups/2/users/1

鉴于:

/users/{id}/group      GET, POST, DELETE

如果用户切换组,端点不会改变,在我看来这使它更清晰。用户仍然是相同的,很明显该组与该用户相关联,但是 group 被引用的内容并不重要,因为它总是 return 关联的 group对于 userid

我想最重要的是端点应该反映你想要实现的目标,如果你正在为用户获取组:

/users/{id}/group      GET, POST, DELETE

或者如果您正在获取一个组的所有用户:

/groups/{id}/users     GET, POST, DELETE