我在此问题中的设置非常类似于: 如何 使用用户资源和列表类型的朋友子资源更新Python Eve中的列表data_relation.
users = {
…
‘friends’: {
'type': 'list’,
'schema': {
'type': 'objectid’,
'data_relation': {
'resource': 'users’
}
}
}
},
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试将新值添加到好友列表时,列表中的其他值将被新值替换.如何向列表中添加单个值并保留旧值?
GET /users/5522987f893e3902048c55ff
{
"_updated": "Wed, 15 Apr 2015 17:22:07 GMT",
"_created": "Mon, 06 Apr 2015 14:30:23 GMT",
"_id": "5522987f893e3902048c55ff",
"friends": [
"552e9eb0893e391063045edc"
]
}
PATCH /users/5522987f893e3902048c55ff
{"friends": [“550f288d893e390204b0a5ac”]}
RESPONSE:
{
"_updated": "Wed, 15 Apr 2015 19:38:06 GMT",
"_created": "Mon, 06 Apr 2015 14:30:23 GMT",
"_status": "OK",
"_id": "5522987f893e3902048c55ff"
}
GET /users/5522987f893e3902048c55ff
{
"_updated": "Wed, 15 Apr 2015 19:38:06 GMT",
"_created": "Mon, 06 Apr 2015 14:30:23 GMT",
"_id": "5522987f893e3902048c55ff",
"friends": [
"550f288d893e390204b0a5ac"
]
}
Run Code Online (Sandbox Code Playgroud)
我也尝试了PUT,但它也用新值替换了列表.
编辑: 我刚尝试使用POST.
POST /users/5522987f893e3902048c55ff/friends
{"552e9eb0893e391063045edc"}
RESPONSE:
{
"_status": "ERR",
"_error": {
"message": "The requested URL was not found on the server. If you entered the URL manually please check your spelling and try again.",
"code": 404
}
}
Run Code Online (Sandbox Code Playgroud)
和
POST /users/5522987f893e3902048c55ff
{"friends": ["552e9eb0893e391063045edc"]}
RESPONSE:
{
"_status": "ERR",
"_error": {
"message": "The method is not allowed for the requested URL.",
"code": 405
}
}
Run Code Online (Sandbox Code Playgroud)
POST 将允许您将新文档添加到端点users。如果它返回 405,那么您很可能需要通过将其添加到RESOURCE_METHODS列表来启用 POST 方法,因为默认情况下所有端点都是只读的;请参阅文档(或者,您只能通过将方法添加到本地resource_methods来为单个端点启用 POST。)
PATCH 允许替换单个字段(与 PUT 不同,PUT 将替换整个文档)。因此,使用 PATCH,您可以friends通过用新值(在您的情况下为新列表 ObjectIds)替换列表来自动更新列表,但恐怕您无法将单个新 ObjectId 推送到现有列表中。
| 归档时间: |
|
| 查看次数: |
1356 次 |
| 最近记录: |