我正在尝试为应用程序编写 REST 接口。
该模型
在这个应用程序的模型中,我已经遇到了如下情况:
- 一个人可以有多项活动。
- 一个活动可以由几个人推荐。
- 人们的活动按照特定的领域(位置)进行排序。
我在我的数据库中用三个表表示了这种情况:人员、活动、人员活动。表 people_activities 包含三个字段:person_id、activity_id、位置。
新要求
到目前为止一切正常,但现在我有一个新要求,我应该能够在其他人之上插入一个人的活动。
因此,如果 people_activities 表的内容是例如这个:
“标记读数 0” “标记运行 1”
如果我收到添加“标记杂耍”的请求,结果应该是:
“标记杂耍 0” “标记阅读 1” “标记跑步 2”
解决方案
REST 接口的困境现在来自我只确定两个选项的事实:
- 使用像 /people/mark/addActivity 这样的单个 URL,但这似乎一点也不平静,因为它修改了 URL 未引用的资源并且包含太多“动词”。
- 使用我已经在使用的一些 URL(例如 /people/mark/activities 或 /people_activities?person=mark),并将新的更改发布到所有这些资源。在我看来,这似乎很平静,但很草率。
在您看来,处理这种情况的正确方法是什么?有没有我不考虑的第三种选择?
第一次编辑
只是通过更好地思考这些问题,我意识到另一个合理的解决方案是在数据库中以这种情况结束:
“标记杂耍 -1” “标记读数 0” “标记运行 1”
因为这个位置只是一个对我来说没有“真正”价值的数字。在实践中我不能这样做,但它看起来像是一种宝贵的信息,也是一种在不修改其他关联的情况下添加新资源的方法,从我的业务逻辑的角度来看,这不是我需要做的事情。
也许另一个错误是我让太多的数据库数据溢出我的界面。在这种情况下,从业务角度来看,我真正需要的是元素的顺序,而不是它们的位置。位置的东西只是我在数据库中用来完成排序的一个技术细节。
所以另一个问题可能是:
- 如果这些信息只是技术细节并且没有暴露给界面用户,那么您认为修改数据库中的某些信息是否合理?