我有带有三个实体的简单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以获得更多详细信息。