2016-11-29 51 views
1

假设我有一些API设置为微服务。一个API是管理用户(用户API),看起来像:多个API的类似端点

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

再有就是用于管理安全信息(访问角色,权限等)另一个API和user在用户创建API可以分配在安全API中定义的group。是否应该在安全微服务或用户微服务中进行关联?

我最初的想法是在安全微服务中,因为那是所有应用程序都会从​​中请求安全信息的地方。就这样,和一个user只能分配给一个group,我再拿出的终点:

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

但该端点感觉就像它属于更在用户微服。其他端点是一种选择是:

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

但是,这则使得它看起来是一个user可能被分配到多个组。但是,我可以设计它,以便当usergroup相关联时,它将它与之前与之关联的group解除关联。

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

回答

0

我想没有必要的“正确”方式。这是我将如何接近它。

基于:

然而,这样当用户关联到 组,它由一组,这是以前与相关 的关联它,我可以设计它。

/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被称为它总是与id

我想返回相关的groupuser底线是,端点应该反映你想达到什么样的,如果你所得到的组用户:

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

,或者如果你得到所有用户的一组:

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