我有带有三个实体的简单Java应用程序:

User
Rent
Tool


用户可以租用多个工具,而工具可以由多个用户租用。 Rent实体可以跟踪租金历史,因此它与User和Tool都具有多对一的关系。

目前,我有两个rest控制器:
UserController
工具控制器
负责服务用户或工具。

问题是,现在我想返回特定用户的租金历史记录。我应该在UserController中使用映射来创建方法吗?

/users/{id}/rents


或者最好创建单独的控制器,如RentController和具有映射的方法,如

/rents?userId={userId}


我认为第一种方法在URI方面更干净,但是我必须在UserController中使用RentService,因为这些是来自不同程序包的类(我使用逐功能方法),所以我感觉有些问题。
问题也出在POST或PUT之类的方法上,我认为最好的选择是这样的:

POST /rents - RentDto as body
PUT /rents/{id} - RentDto as body


或者也许可以使用方法:

GET /users/{id}/rents


在RentController中而不在UserController中?
您如何解决此类问题,您将提出什么建议?

最佳答案

当我们谈论RESTful API时,我们应该能够使用任何CRUD方法而无需额外的参数,因此,考虑到这一点,我将使用路径参数方法(/users/{id}/rents)。

通常,如果您要获取具有非常特定信息的列表或列表项,我们会使用查询参数。

我建议this article以获得更多详细信息。

10-06 06:55