我需要知道如何决定什么是资源,什么是子资源。 我只是有一些表的,我需要做的URI。 因此可以说,我有一个学生表和studentclass(这给名字,可能有一些的学生就读于类的更多细节)表(N:1)。
我会让学生像下方的主要资源和设计URI
http://home/someapi/v1/student/1/
继建筑URI休息方法
QUS 1:哪些URI如下所示做我必须做的访问studentclass
1.http://home/someapi/v1/studentclass?studentid=1 or
2.http://home/someapi/v1/student/1/studentclass
我一定要考虑studentclass作为一个单独的资源..?
和
QUS 2:假设有N:那么表之间的N个关系应该如何URI的设计呢?
我建议处理两个资源: student
和class
。
你可以得到一个student
使用以下URI:
http://home/someapi/v1/students/1
注意是复数这里,如果你想了解为什么你应该用复数阅读这篇文章: http://blog.apigee.com/detail/restful_api_design_plural_nouns_and_concrete_names/ 。
如果一个student
可以在一个被登记class
,也可能是这名学生的属性,所以你可以返回以下JSON文件(例如):
{
"student": {
"id": 1,
"firstName": "John",
"lastName": "Doe",
"class": {
"id": 10,
"name": "Room Y"
}
}
}
你可以得到一个特定的class
具有以下URI:
http://home/someapi/v1/classes/10
你可以得到所有的学生都与此URI给定的类:
http://home/someapi/v1/classes/10/students
现在,如果你有之间的关系NN students
和classes
,它会改变我对第一个建议student
在JSON表示。 事实上, class
关系将成为集合class
的资源,而不是的嵌入式特性student
,你应该使用以下URI:
http://home/someapi/v1/students/1/classes
意思是“检索学生#1的所有类”。
您可以公开既class
和student
资源。 无需决定哪一个是主要原因之一,因为他们描述了两个不同的东西。 有/students
及/classes
允许你创建students
和classes
,你可以将它们链接等。
最后一件事,它是推荐使用的查询参数( ?foo=bar
)用于过滤的目的。
我认为StudentClass(或简称为“类”)应该是一个不同的资源为Class可以amoung学生共享。 所以这个URI会适合您的需要:
HTTP:家用/ someapi / V1 / studentclass studentid = 1