【发布时间】:2020-08-18 22:34:57
【问题描述】:
在使用 Java 中的 REST API 构建 CRUD 应用程序时,我一直在重新发明轮子,并且我正在寻找某种可以应用的标准。
让我们举个例子。假设我有一个“用户”表和这些 REST 端点:
GET /users/{user_id} // returns a user
POST /users // creates a user
PUT /users/{user_id} // updates a user
在每个方法中,我必须选择、插入或更新数据库中的用户。
对于六个操作中的每一个(3 个用于 REST,3 个用于数据库),对于通过 REST 传入或发送到数据库的“用户”POJO,我需要一组不同的属性。
例如,在 REST 方面,创建用户时,我不需要 user_id(因为它是由数据库创建的),但我确实需要密码。获取用户时,我确实想要 user_id,但我不想将密码返回给客户端。更新用户时,我可能希望省略一些字段,因为它们是只读的(例如用户名或创建日期)。
在数据库方面,我可能需要不会在 REST API 中传回的不同字段,例如“is_approved”或“some_secret”。而且我经常需要创建派生字段,例如“password_hash”。
所以,正如我所说,同一事物的六种不同表示形式。在 Java 中,我通过创建六个不同的 POJO 类来做到这一点。它并不总是需要那么多独特的课程,但有时会。
在 REST API 中,我不想对所有端点使用相同的类而只是忽略某些字段,因为此类会传递给我们的 API 文档工具,并且其属性会被发布。
这六个类有什么标准的命名约定吗?
对于 REST,过去我使用过 CreateUser、GetUser 和 UpdateUser。我不喜欢这些名字,因为它们是动词,应该是名词。
UserForCreation 和 UserForUpdate 很尴尬。 NewUser 和 ModifiedUser 可能很好,但我不知道如何为 GET 调用用户。
我还需要另外一整套数据库端的名称。
这种事情肯定有一个标准或约定。有人知道是什么吗?
【问题讨论】:
-
只比
CreateUser、GetUser、UpdateUser略好,并借鉴了六边形架构:CreateUser[Request|Response]、GetUser[Request|Response]、UpdateUser[Request|Response]? -
哦,我喜欢这个。 @图灵85
-
把评论变成答案 =)
标签: java api rest design-patterns