REST API设计 - 使用ETag将集合作为数组

时间:2015-06-22 09:53:44

标签: rest

采用以下网址模板:

~/pupil/{id}/subjects

如果主题是以传统方式表示的集合,就好像每个项目都像瞳孔项一样独立,那么这是揭露它们的正确方法吗?

当您考虑根据学生更新集合并与其他API调用者同时更新时,会开始出错。

突然间,您无法同步访问权限,因为没有ETag来覆盖该集合,您将最终交错更改并陷入纠结。

不同的设计可以看到主题作为子数组合并到学生的实体中,而/subjects URL仅供读取访问。

也许应该将主题作为单个数组集实体返回,并使用谨慎的ETag,并且应该禁用POSTing个别主题并通过整个集合的POST / PUT进行更新,但如果列表很长,该怎么办?需要分页吗?

也许设计决定是个案,而不是一个全面的指导方针。不确定。

思想?

1 个答案:

答案 0 :(得分:0)

这取决于你是否想要治疗"科目"作为单一资源与否。

正如您所说,如果您的API的消费者想要添加,删除或修改单个主题,那么,就REST模式而言,表示它们的传统方式是正确的:

~/pupil/{id}/subjects

将返回

的资源列表
~/pupil/{id}/subjects/{subjectId}

除非有充分理由优化批量操作或缓存,否则这是最RESTful且最直接的实现。