采用以下网址模板:
~/pupil/{id}/subjects
如果主题是以传统方式表示的集合,就好像每个项目都像瞳孔项一样独立,那么这是揭露它们的正确方法吗?
当您考虑根据学生更新集合并与其他API调用者同时更新时,会开始出错。
突然间,您无法同步访问权限,因为没有ETag来覆盖该集合,您将最终交错更改并陷入纠结。
不同的设计可以看到主题作为子数组合并到学生的实体中,而/subjects
URL仅供读取访问。
也许应该将主题作为单个数组集实体返回,并使用谨慎的ETag,并且应该禁用POSTing个别主题并通过整个集合的POST / PUT进行更新,但如果列表很长,该怎么办?需要分页吗?
也许设计决定是个案,而不是一个全面的指导方针。不确定。
思想?
答案 0 :(得分:0)
这取决于你是否想要治疗"科目"作为单一资源与否。
正如您所说,如果您的API的消费者想要添加,删除或修改单个主题,那么,就REST模式而言,表示它们的传统方式是正确的:
~/pupil/{id}/subjects
将返回
的资源列表~/pupil/{id}/subjects/{subjectId}
除非有充分理由优化批量操作或缓存,否则这是最RESTful且最直接的实现。