我需要知道如何确定什么是资源,什么是子资源。我只有一些需要为其制作 uri 的表。假设我有一个学生表和学生类(class)(给出了学生所注册类(class)的名称以及可能的更多详细信息)表,其中包含(N:1)。
我将使学生成为主要资源并设计 uri,如下所示
http://home/someapi/v1/student/1/
遵循休息方法构建 uri
Qus 1:我必须使用下面显示的哪个 uri 来访问学生类(class)
1.http://home/someapi/v1/studentclass?studentid=1 or
2.http://home/someapi/v1/student/1/studentclass
我是否必须将学生类(class)视为单独的资源..?
和
问题2:假设表之间存在N:N关系,那么uri应该如何设计?
最佳答案
我建议处理两种资源:student
和 class
。
您可以使用以下 URI 获取学生
:
http://home/someapi/v1/students/1
请注意这里的复数,如果您想了解为什么应该使用复数,请阅读这篇文章:http://blog.apigee.com/detail/restful_api_design_plural_nouns_and_concrete_names/ .
如果学生
可以注册一个类(class)
,它可能是该学生的属性,因此您可以返回以下 JSON文档(例如):
{
"student": {
"id": 1,
"firstName": "John",
"lastName": "Doe",
"class": {
"id": 10,
"name": "Room Y"
}
}
}
您可以使用以下 URI 获取特定的类
:
http://home/someapi/v1/classes/10
您可以使用此 URI 获取给定类(class)的所有学生:
http://home/someapi/v1/classes/10/students
现在,如果学生
和类(class)
之间存在N-N关系,它将改变我关于学生<的第一个建议
JSON 中的表示形式。实际上,class
关系将成为 class
资源的集合,而不是 student
的嵌入属性,您应该使用以下 URI:
http://home/someapi/v1/students/1/classes
意思是“检索学生#1的所有类(class)”。
您可以公开class
和student
资源。无需决定哪一个是主要的,因为它们描述了两种不同的事物。拥有 /students
和 /classes
允许您创建 students
和 classes
,您可以链接它们,等等。
最后一件事,建议使用查询参数(?foo=bar
)进行过滤。
关于api - 如何根据一些表轻松地决定资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12141237/