[我正在复制去年的问题,仍然没有回答,并稍微扩展一下]
我正在使用 node.js + mongoose (MEAN.io) 开发 REST api。我有一个模型,其中几乎没有嵌套数组。我有一个 put 端点来更新文档。但是,要将对象添加到子数组中,我需要一个单独的端点还是有办法使用相同的放置端点?
companyName: String,
city: String,
pincode: Number,
managers: [{
name: String,
dob: Date,
gender: String,
highestEducation: String,
email: String,
phoneNumbers: [{phoneNumber: Number}],
}],
我有一个端点 ../api/customer 用于更新文档。它用我提供的 json 替换现有文档。所以,如果我想添加一个管理器(而不是替换现有的管理器),我是否需要为此单独的端点?优化方案是什么?
目前,我已经创建了另一个像这样的 put api:
../api/customer/:id/managers
在 API 的服务器端,我使用的是 customer.managers.push(updates); 而不是 _.merge(customer, updates)。 p>
最佳答案
您的 API 设计最终是您的选择。就个人而言,我更喜欢让事情变得很浅,如果那样的话,也许一段关系很深。通常,我将为每个资源提供一个端点。
就您关于现有客户的现有经理的新电话号码的示例而言。使用有点浅的 api 的一般流程可能是:
- 前端:
- 转到 URL site/users/1(这会加载用户的基本 View )。
- 应用程序接口(interface):
- 行动:获取
- 网址:网站/api/v1/users/1
- 描述:显示用户 1
- 响应:
{ id: 1, name: "bob", age: 22 }
- 应用程序接口(interface):
- 行动:获取
- 网址:site/api/v1/managers?query=user_id=1
- Desc: INDEX 所有用户 1 的经理
- 响应:
{ [ { id: 55, name: "mana1", phone: 4444 }, { id: 66, name: "mana2", phone: 333 }, .. ] }
- 前端:将经理列为一堆带有一些隐藏 ID 的表单
- 前端:输入电话号码点击保存
- 应用程序接口(interface):
- 行动:补丁
- 网址:站点/api/v1/managers/55
- body :
{ 电话:9898 }
- Desc: PATCH manager 55 with new phone data
- 响应:{ ..更新数据.. }
我个人非常喜欢这个 API: https://github.com/WhiteHouse/api-standards
它不是休息,而是简单、可重复和可用。
关于angularjs - 单个 rest 'put' 端点是否足以用嵌套数组更新文档?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37644787/