我有以下(假设的)情景:
申请在学校的课堂上报告学生。我有3桌学校,班级,学生。班级有一个FK school_id,学生有一个FK class_id。
我已将所有实体设置好并准备就绪,我即将通过Rest界面公开它们。
我的URI应该是这样的:
学校 - 学校名单
学校/ {id} - 特定学校
学校/ {id} /班级 - 班级列表
学校/ {id} / classes / {id} - 特定班级
学校/ {id} / classes / {id} /学生 - 列出学生
学校/ {id} / classes / {id} / student / {id} - 特定学生
即使在特定学生的情况下,我也会忽略我将忽略学校ID和班级ID,因为我关心的所有问题都是学生ID。
我应该: 学校/学生/ {id} - 针对特定学生。
答案 0 :(得分:4)
从多个位置公开资源没有问题(尽管如果有多个位置*,最好指定canonical url。)
因此,提供以下所有URI可能是有意义的:
lists:
student
classes/{id}/student
schools/{id}/classes/{id}/student
specific:
student/{id}
classes/{id}/student/{id}
schools/{id}/classes/{id}/student/{id}
在您的情况下,实体之间的关系本身不是实体。如果是这种情况(例如,如果您的资源类 - 学生具有指定学生在课程中的时间长度的属性)那么包含class
和student
ID的URI会变得更多这很重要,因为它们提供了揭示关系本身属性的好地方。
*最好向客户提供规范网址,您可以将其作为响应标头中“Content-Location”的值发送。
答案 1 :(得分:1)
此外,具有使用复数/单数名称的约定是有用的。
有些人喜欢单数名称,有些人(比如Ruby人)使用两者和转换工具。
例如,在Ian的回答student
列表中,网址必须为students
。