使用MongoDB嵌入集合(子文档数组)会违反REST吗?
假设我的Mongo数据库中有一个使用MongoDB嵌入集合(子文档数组)会违反REST吗?,mongodb,rest,subdocument,Mongodb,Rest,Subdocument,假设我的Mongo数据库中有一个users集合: users _id emailAddress firstName lastName passwordHash accessLogs: [ ... ] createdAt 如您所见,用户文档可以包含一个accesslog数组。太好了 但假设我想更新一个用户记录,并对使用此数据库的RESTful API执行一个PUT/users/:id请求。有了推杆,你就应该拿回你放进去的东西。假设用户已登录500次。为了避免违反RES
users
集合:
users
_id
emailAddress
firstName
lastName
passwordHash
accessLogs: [ ... ]
createdAt
如您所见,用户文档可以包含一个accesslog数组。太好了
但假设我想更新一个用户记录,并对使用此数据库的RESTful API执行一个PUT/users/:id
请求。有了推杆,你就应该拿回你放进去的东西。假设用户已登录500次。为了避免违反REST,这是否意味着我的PUT数据应该包括accessLogs数组及其所有项
我认为请求处理程序可以只更新除accesslog之外的所有内容。在最严格的定义中,
PUT确实应该替换对象的内容。如果您想用部分数据/指令更新现有对象。这将允许您指定要添加访问日志(或不修改它们),而不必发送整个对象——只需发送需要更新的内容的说明。在最严格的定义中,PUT
确实应该替换对象的内容。如果您想用部分数据/指令更新现有对象。这将允许您指定要添加accessLogs(或不修改它们),而不必发送整个对象——只需发送需要更新的内容的说明。在您的情况下,accessLogs
是生成的只读属性,因此它不必是PUT请求的一部分。您也不发送\u id
属性,如果某些属性具有默认值,您也不必发送这些属性
PUT方法要求将封闭的实体存储在
提供的请求URI。如果请求URI引用已存在的
资源,则应将封闭的实体视为已修改的实体
位于源服务器上的版本
您可以找到一个类似的问题。在您的情况下,
accessLogs
是一个生成的只读属性,因此它不必是PUT请求的一部分。您也不发送\u id
属性,如果某些属性具有默认值,您也不必发送这些属性
PUT方法要求将封闭的实体存储在
提供的请求URI。如果请求URI引用已存在的
资源,则应将封闭的实体视为已修改的实体
位于源服务器上的版本