api - 如何根据一些表轻松地决定资源

标签 api rest asp.net-mvc-4 asp.net-web-api

我需要知道如何确定什么是资源,什么是子资源。我只有一些需要为其制作 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应该如何设计?

最佳答案

我建议处理两种资源:studentclass

您可以使用以下 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)”。

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

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

关于api - 如何根据一些表轻松地决定资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12141237/

相关文章:

java - 在 Spring 使用多个服务/ Controller

rest - Bing map REST API 无法正常工作

c# - 如何在 mvc c# 中解密 FormsAuthenticationTicket?

python - 从 Airbnb API 获取数据时出现 403 错误

api - Instagram API : I want to get recent images based on tag, 但我只收到我自己的

rest - 相同的字符串导致不同的 MD5 哈希

javascript - 它使用 ASP.NET MVC 和 javascript 在 TreeView 中显示 "undefined"

asp.net-mvc - MVC中 Controller 如何知道DeleteConfirmed上的Id?

python - 通过 Python API 获取所有 Woocommerce 订单

Swift - 网络请求和后台队列