gpt4 book ai didi

mongodb - 将项目添加到数组字段的正确 REST 端点是什么?

转载 作者:可可西里 更新时间:2023-11-01 10:31:25 28 4
gpt4 key购买 nike

假设我正尝试在使用 MongoDB 的 Go 编写的 RESTful API 中模拟将学生添加到组的操作。

一个组是这样建模的:

type Group struct {
Section mgo.DBRef
Instructor mgo.DBRef
Students []mgo.DBRef
}

另一个限制是 API 正在实现 HAL+JSON 协议(protocol),其中资源表示为链接。

我看到了几个选项(如下):

  • POST/groups/{groupID}/students/{studentID} 会将具有 studentID 的学生添加到组中。这种方法的问题在于,由于我实现的是HAL+JSON协议(protocol),我不希望客户端手动拉出ID并生成这个链接。所有资源都将被表示,即 /person/123 可以是学生。

  • PUT/groups/{groupID} 同时发送应属于该组的完整学生数组。这样好像会引入很多复杂的解析逻辑。

如果还有其他选择,我也会接受。

编辑:我将采用的方法如下:* POST/groupmembership/通过发送带有学生 ID 和要将学生添加到的组 ID 的 JSON。但是,在后端,我没有生成新模型,而是获取对象并以编程方式将指定的学生添加到指定的组中。

接下来的问题是如何从组中删除学生?我可以用

类似地向/groupmembership 发送 DELETE 请求吗
{
"student": 123,
"group": 456
}

从 456 组中删除学生 123?

最佳答案

where resources are represented as links

这不是真的。链接可能是操作调用,因此它们代表可能的资源状态转换。

要向集合中添加内容,您需要一个集合资源,并且必须决定要在该集合中存储什么。在您的情况下,这可以是两件事:团体学生成员(member)资格或学生。如果这是 1:n 关系,那么您可以存储学生和删除学生。如果这是一个 n:m 关系,那么您必须存储成员资格并删除成员资格,因为您不想从存储中删除学生,只是想删除成员资格。

您可以通过两种方式识别成员身份:

  • 您可以使用参与者的 ID:/groups/1/memberships/student:1/students/1/memberships/group:1
  • 您可以为每个成员(member)添加一个唯一的 ID:/memberships/1234

注意事项:

  • URI 结构仅从人的角度来看很重要。 REST 客户端将检查链接关系而不是 URI 结构。
  • 资源与数据库中的实体不同。只有通过简单的 CRUD 应用程序才能代表它们相同的东西。所以 REST 与您的数据库结构无关。

关于mongodb - 将项目添加到数组字段的正确 REST 端点是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24001825/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com