首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >REST加入其他资源/映射资源的资源

REST加入其他资源/映射资源的资源
EN

Stack Overflow用户
提问于 2018-06-29 13:13:00
回答 1查看 328关注 0票数 0

假设我想接近REST原则,如果我有一个名为students的资源和一个名为courses的资源,我可以预订一个这样的课程:

代码语言:javascript
复制
PUT: api/courses/{courseId}/students/{studentId}

我本能地想列出这样的学生预订:

代码语言:javascript
复制
GET: api/courses/{courseId}/students

但是我想包含一些与预订相关的信息(比如预订号),这意味着第三个映射的资源。

因此,我建议,要获得学生预订,我们需要一个单独的预订资源,这可能是这样的:

代码语言:javascript
复制
GET: api/courses/{courseId}/student-bookings

我的问题是:是否有人认为上述方法存在问题,因为我用于创建预订的端点与用于检索已创建的预订的端点不同?

编辑:另一个让我感觉更好的选择是下面的内容,尽管它并没有真正改变这个问题,它涉及使用与创建资源不同的端点访问创建的资源:

代码语言:javascript
复制
GET: api/courses/student-bookings?courseId={courseId}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-29 13:39:04

假设我想接近休息原则..。

REST并不关心URI的设计。但是,使用正确标识资源并允许API发展的URI被认为是一种良好的实践。

我理解预订(或注册)是一种新的资源,它有自己的属性。

所以,除了/api/courses/api/students,我还有/api/enrollments,它可以映射出一门课程和一名学生之间的关系。

可以使用POST请求创建注册,如下所示:

代码语言:javascript
复制
POST /api/enrollments HTTP/1.1
Host: example.org
Content-Type: application/json

{
  "course": "designing-wep-apis",
  "student": "john.doe"
}

成功的请求将返回已创建的注册的201Location

代码语言:javascript
复制
HTTP/1.1 201 Created
Location: /api/enrollments/20180012

以下请求可用于检索特定课程的所有注册:

代码语言:javascript
复制
GET /api/enrollments?course=designing-wep-apis HTTP/1.1
Host: example.org
Accept: application/json

以下是检索特定学生的所有入学情况:

代码语言:javascript
复制
GET /api/enrollments?student=john.doe HTTP/1.1
Host: example.org
Accept: application/json
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51102598

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档