REST端点的命名约定

REST端点的命名约定,rest,Rest,假设我有财产,每个都有建筑物,每个都有房间,每个都有合同 例如,我将如何为它设计一个GET方法 按照指南,我是这样做的: GET http://www.example.com/properties/33245/buildings/8769/rooms/44/contracts 这将返回44号房间的所有合同。这里的问题是,properties/33245/buildings/8769部分是无用的,并且没有使用,44是数据库中表Rooms的主键,这意味着,我可以使用以下约定: GET http:/

假设我有财产,每个都有建筑物,每个都有房间,每个都有合同

例如,我将如何为它设计一个GET方法

按照指南,我是这样做的:

GET http://www.example.com/properties/33245/buildings/8769/rooms/44/contracts
这将返回44号房间的所有合同。这里的问题是,
properties/33245/buildings/8769
部分是无用的,并且没有使用,44是数据库中表
Rooms
的主键,这意味着,我可以使用以下约定:

GET http://www.example.com/rooms/44/contracts
问题是,这些是什么房间?也许将来还有其他房间

我应该继续使用长约定吗

这里的问题是properties/33245/buildings/8769部分是无用的,没有使用

为什么这是个问题

我应该继续使用长约定吗

对。房间属于建筑物。没有建筑,房间就不可能存在。因此,它不应该有自己的“根端点”(比如
example.com/rooms
)。它应该被绑定到一栋建筑上,而该建筑又被绑定到一处房产上

一定要使用“长版本”


使用“长版本”(约定、一致性、可读性等)背后的逻辑比
properties/33245/buildings/8769
在获得房间时仍然未使用这一事实更重要。

但是我应该如何在后端处理它,我的意思是,我应该查询数据库以获取房间id为44的合同吗,或者我应该在查询中使用所有这些数字,也就是说,所有房间id为44、建筑id为8769、房产id为33245的合同都会被返回。@Jaanus这取决于您。如果房间ID是唯一的,您可以只查询房间。如果要查询非唯一的内容,例如房间号,则需要在查询中包含更多参数