以RESTful方式(框和节点)建模更复杂的实体关系

mhe*_*ens 14 rest metadata relationships

这是一个设置我的问题的例子.我有一个包含'盒子'的模型,他们有一个REST端点:

/boxes, /boxes/{boxId}

该模型还包含"节点":

/nodes, /nodes/{nodeId}

节点可以位于边界上,这是一种多对多关系.让一个节点位于多个边界上是一种表示这些边界(部分)重叠的方式,但节点也有其他用途.

框和节点的快速可视化示例

我正在尝试确定如何以非令人惊讶的RESTful方式对其进行建模.我可以看到几种方法来做到这一点.但我不确定应该使用哪个:

  1. 模型/borders作为具有自己的端点的完全成熟的实体类型.有框参考四个边框(顶部,底部,左侧,右侧).边框引用节点列表.让节点引用边框列表.

  2. /boxNodeRelationships具有自己的端点的模型,并且每个这样的关系指向一个框,一个节点,并包含一个"边框"字段(一个带有四个选项的枚举).

两者都很相似,而且相当"重".另一种选择是更专注:

  1. 给框一个{ border, node }对象列表.为节点提供{ box, border }对象列表.这些对象将从GET调用返回,并期望从POST/ PUT调用返回,但不会是具有端点的完全成熟类型.

我想知道RESTifarian如何解决这个问题,以及听取这些方法的一些优点/缺点.我还想知道是否有其他方法根本不同.

ACV*_*ACV 4

我会创建 3 个实体:

  • 盒子
  • 边界
  • 节点

以及关系:

  • 一个 Box 可以有 n 个边框
  • 一个边界可以有n个节点

所以你可以解决他们:

获取第一个节点:/boxes/1/borders/1/nodes/1

你可能有一些逻辑:

if /boxes/1/borders contain /nodes/1 and /boxes/2/borders contain /borders/1 then they intersect
Run Code Online (Sandbox Code Playgroud)

等等。