实现API方法和用户界面解耦的策略

问题描述 投票:0回答:1

实现 API 方法和用户界面解耦的行之有效的策略是什么?

我正在为该应用程序创建 REST API 服务。我注意到我的 API 方法与用户界面紧密耦合。

假设我的应用程序中有这个简单的实体

public class User{
    private String username;
    private List<String> roles;
    private Set<String> permissions;
}

现在让我们看一下用户界面。

用户界面中有两个页面,其中一个页面允许管理员通过指定用户名和角色来创建用户。另一个页面允许管理员颁发权限。

这意味着我必须创建两个 API 方法,一个用于创建用户并分配角色。还有一个用于颁发权限。

public class UserService{
    public User createUser(User user){
        // save user to db
        // assign roles;
    }
    
    public User assignPermissions(Integer userId, List<String> permissions){
        // find user from db
        // assign permissions
    }
}

为什么我要严格遵循 UI?在我看来,创建三种 API 方法更符合逻辑,一种用于创建用户,另一种用于分配角色,最后一种用于颁发许可证。

那么,如何才能实现这种解耦呢?

java rest architecture api-design
1个回答
0
投票

为什么我要严格遵循 UI?在我看来,创建三个 API 方法更符合逻辑 [...]

您的 API 确实不应该反映 UI,这从一开始就是一种反向依赖。 API 理想地公开反映某些(功能)工作流程的相关操作的方法。 UI 利用 API,但可以重新组合和重塑“低级”操作,具体取决于向导。

关于用于检索/搜索数据的 API 方法的特殊考虑:人们可能会设想一种 API 使“任何”查询成为可能,但一种天真的方法最终只是为用户重新发明 SQL 或等效的 DSL。如果仅仅提供一组参数化查询还不够(并且只有需求才能证明这一点),那么下一个级别将是(类似)GraphQL

© www.soinside.com 2019 - 2024. All rights reserved.