【问题标题】:Similar Endpoints on multiple API's多个 API 上的类似端点
【发布时间】:2017-04-14 01:10:53
【问题描述】:

假设我将一些 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 似乎可以分配给多个组。但是,我可以对其进行设计,以便当 usergroup 关联时,它会将其与之前关联的 group 解除关联。

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

【问题讨论】:

    标签: rest microservices api-design


    【解决方案1】:

    我想没有“正确”的方式必然。以下是我的处理方法。

    基于:

    但是,我可以设计它,以便当用户关联到 组,它将它与以前的组解除关联 相关联。

    /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 被称为什么并不重要,因为它将始终返回与 user 相关联的 group 987654330@

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

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

    或者,如果您要为一个组获取所有用户:

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

    【讨论】:

      猜你喜欢
      • 2013-05-01
      • 2022-01-22
      • 1970-01-01
      • 2019-09-11
      • 1970-01-01
      • 1970-01-01
      • 2017-05-16
      • 2014-01-10
      • 1970-01-01
      相关资源
      最近更新 更多