多个API

时间:2016-11-29 21:28:05

标签: rest microservices api-design

假设我将一些API设置为微服务。一个API是管理用户(用户API),如下所示:

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

然后还有另一个用于管理安全信息的API(访问角色,权限等),并且可以为用户API中创建的user分配一个group安全API。这种关联应该在安全微服务中还是在用户微服务中进行?

我最初的想法是在安全微服务中,因为这是所有应用程序将从中请求安全信息的地方。有了这个,并且user只能分配给一个group,我会得到一个端点:

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

但是该端点感觉它更像是用户微服务。作为选项的其他端点是:

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

但是,这似乎可以将user分配给多个组。但是,我可以设计它,以便当usergroup相关联时,它会将其与先前与之关联的group取消关联。

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

1 个答案:

答案 0 :(得分:0)

我猜没有'对'方式必然。以下是我将如何处理它。

基于:

  

然而,我可以设计它,以便当用户与a关联时   小组,它将它与以前的小组分开   与。相关联。

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

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

例如:/groups/1/users/1可能有效,但当用户移动群组时/groups/1/users/1将不再返回结果。它现在变为/groups/2/users/1

然而:

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

如果用户切换组,端点不会发生变化,这使我认为它更清晰,更清晰。用户仍然是相同的,并且很清楚该组与该用户相关联,但是group被引用并不重要,因为它将始终返回关联的{{1对于group

user

我想底线是端点应该反映出您要实现的目标,如果您要为用户获取该组:

id

或者如果您要获得某个组的所有用户:

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