如何在一个宁静的方式基于一些表决定的资源(How to decide a resource in a

2019-09-21 17:52发布

我需要知道如何决定什么是资源,什么是子资源。 我只是有一些表的,我需要做的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的设计呢?

Answer 1:

我建议处理两个资源: studentclass

你可以得到一个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 studentsclasses ,它会改变我对第一个建议student在JSON表示。 事实上, class关系将成为集合class的资源,而不是的嵌入式特性student ,你应该使用以下URI:

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

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

您可以公开既classstudent资源。 无需决定哪一个是主要原因之一,因为他们描述了两个不同的东西。 有/students/classes允许你创建studentsclasses ,你可以将它们链接等。

最后一件事,它是推荐使用的查询参数( ?foo=bar )用于过滤的目的。



Answer 2:

我认为StudentClass(或简称为“类”)应该是一个不同的资源为Class可以amoung学生共享。 所以这个URI会适合您的需要:

HTTP:家用/ someapi / V1 / studentclass studentid = 1



文章来源: How to decide a resource in a restful way based on some tables