2

我需要知道如何决定什么是资源,什么是子资源。我只有一些需要制作 uri 的表。所以假设我有一个学生表和学生类(它给出了学生注册的班级的名称和可能的更多细节)表(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

我是否必须将学生课视为单独的资源..?

问题2:假设表之间存在N:N关系,那么uri的设计应该如何?

4

2 回答 2

2

我建议处理两个资源:studentclass.

您可以student使用以下 URI 获取:

http://home/someapi/v1/students/1

注意这里的复数,如果你想了解为什么应该使用复数,请阅读这篇文章:http: //blog.apigee.com/detail/restful_api_design_plural_nouns_and_concrete_names/

如果 astudent可以注册到 one 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关系,它将改变我关于JSON 表示的第一个建议。实际上,关系将成为资源的集合,而不是 a 的嵌入属性,您应该使用以下 URI:studentsclassesstudentclassclassstudent

http://home/someapi/v1/students/1/classes

意思是“检索学生 #1 的所有课程”。

您可以同时公开classstudent资源。无需决定哪一个是主要的,因为它们描述了两种不同的事物。拥有/studentsand/classes允许您创建studentsand classes,您可以链接它们等。

最后一件事,建议使用查询参数 ( ?foo=bar) 进行过滤。

于 2012-08-27T14:58:52.477 回答
0

我认为 StudentClass(或简称为“Class”)应该是不同的资源,因为 Class 可以在学生之间共享。所以这个 Uri 会满足你的需要:

http:home/someapi/v1/studentclass?studentid=1

于 2012-08-27T11:49:04.687 回答