在多对多关系中执行批量分配的适当REST端点是什么

时间:2017-07-20 18:42:40

标签: rest api http

假设我有4个表:课程教程测验教程 - 测验

关系如下:

  • 课程教程是一对多的:每个课程都有很多教程,每个教程都属于一门课程。
  • 课程测验是一对多的:每个课程都有很多测验,每个测验都属于一门课程。
  • 教程测验是多对多的:每个教程都可以分配给很多测验,每个测验都可以分配给很多教程。
  • Tutorial-Quizzes 充当这两者之间的桥梁。每条记录都包含两个字段,即教程和测验的ID。

现在,对于特定课程,我可以通过一个操作为多个测验(批量)分配多个教程。在为教程分配测验时,会在教程 - 测验表中添加新记录。

执行此批量分配的适当方法和资源名称是什么?

PATCH /courses/id/tutorials/quizzes
PATCH /courses/id/quizzes/tutorials
PATCH /courses/id/tutorials-quizzes

question与我的要求有关,但地雷略有不同,因为我在操作中为两个不同的集合分配了多个项目。

1 个答案:

答案 0 :(得分:2)

您可以使用POST或Patch

发表: POST方法通常用于在列表资源上使用时添加元素,但您也可以支持此方法的多个操作。

POST /batch
[
  { method: 'POST', path: '/items', body: { title: 'foo' } },
  { method: 'DELETE', path: '/items/bar' }
]



POST/courses/id/tutorials/quizzes

<强>修补程序: 在这种情况下,没有必要定义您的格式来描述更新。 使用PATCH方法也是合适的,因为相应的请求对应于部分更新。根据RFC5789(http://tools.ietf.org/html/rfc5789

PATCH /items
[ { id: 1, name: 'foo' }, { id: 2, name: 'bar' } ]


PATCH /courses/id/tutorials/quizzes

示例:Google Drive API

POST https://www.googleapis.com/batch

Accept-Encoding: gzip
User-Agent: Google-HTTP-Java-Client/1.20.0 (gzip)
Content-Type: multipart/mixed; boundary=END_OF_PART
Content-Length: 963

--END_OF_PART
Content-Length: 337
Content-Type: application/http
content-id: 1
content-transfer-encoding: binary


POST https://www.googleapis.com/drive/v3/files/fileId/permissions?fields=id
Authorization: Bearer authorization_token
Content-Length: 70
Content-Type: application/json; charset=UTF-8


{
  "emailAddress":"example@appsrocks.com",
  "role":"writer",
  "type":"user"
}
--END_OF_PART
Content-Length: 353
Content-Type: application/http
content-id: 2
content-transfer-encoding: binary


POST https://www.googleapis.com/drive/v3/files/fileId/permissions?fields=id&sendNotificationEmail=false
Authorization: Bearer authorization_token
Content-Length: 58
Content-Type: application/json; charset=UTF-8


{
   "domain":"appsrocks.com",
   "role":"reader",
   "type":"domain"
}
--END_OF_PART--

https://developers.google.com/drive/v3/web/batch

https://saw.saas.hp.com/help/en/full/Content/8000_DeveloperGuide/ApiRESTBulkUpdate.htm

https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/dome_composite_sobject_tree_flat.htm

资源命名指南:

http://www.restapitutorial.com/lessons/restfulresourcenaming.html