REST:HTTP PUT - 具有子实体的父实体
REST: HTTP PUT - Parent with Child Entities
当我在父记录上使用 HTTP PUT
时,REST 中是否有 standard/convention 指示子实体的预期行为?
比如我的Parent
对象的初始状态是:
{
"id": 1,
"children": [
{"id": 1, ...},
{"id": 2, ...},
{"id": 3, ...}
],
...
}
然后我在 /parents
上执行 HTTP PUT
:
{
"id": 1,
"children": [
{"id": 2, ...}, // I changed a property in here
],
...
}
我倾向于用 id
2 更新 Parent 和 Child,但是 id
的 1 和 3 的 Children 是否应该删除?
HTTP 和 REST 没有 'children' 的概念。如果您对资源执行 GET
请求,并且那里有称为“子项”的东西,那么这些子项基本上只是该资源的一部分。
PUT
请求应该替换资源的状态。如果您要用新的子列表替换子列表,那么是的,我希望这些更改能够保留。
Is there a standard/convention in REST that dictates the expected behavior with respect to Child entities when I use an HTTP PUT on Parent record?
没有
- REST 没有“实体”或“记录”。它有“资源”。
- REST 没有“children”。通用标识符拼写并不意味着两个资源之间存在关系。
PUT /parents HTTP/1.1
Content-Type: application/json
{
"id": 1,
"children": [
{"id": 2, ...}, // I changed a property in here
],
...
}
此消息的意思是“使资源/parents 的表示与此消息的正文相匹配”。换句话说,将我的这份文件副本保存在您的文件之上。
在这种情况下,它表示 children 数组中应该只有一个条目,id:2。
服务器如何执行此操作是隐藏在 REST facade 后面的实现细节。消息只描述客户想要什么,而不描述客户得到什么。服务器拥有自己的资源,并且可以自由选择如何修改它们。这可能包括删除底层实体,或将它们标记为生命周期结束,或在不更改它们的情况下将它们从列表中删除,甚至 none 这些东西。
服务器确实需要对其响应稍微小心一些,以确保不要暗示新的表示与请求的正文匹配,除非这确实是它所做的。
当我在父记录上使用 HTTP PUT
时,REST 中是否有 standard/convention 指示子实体的预期行为?
比如我的Parent
对象的初始状态是:
{
"id": 1,
"children": [
{"id": 1, ...},
{"id": 2, ...},
{"id": 3, ...}
],
...
}
然后我在 /parents
上执行 HTTP PUT
:
{
"id": 1,
"children": [
{"id": 2, ...}, // I changed a property in here
],
...
}
我倾向于用 id
2 更新 Parent 和 Child,但是 id
的 1 和 3 的 Children 是否应该删除?
HTTP 和 REST 没有 'children' 的概念。如果您对资源执行 GET
请求,并且那里有称为“子项”的东西,那么这些子项基本上只是该资源的一部分。
PUT
请求应该替换资源的状态。如果您要用新的子列表替换子列表,那么是的,我希望这些更改能够保留。
Is there a standard/convention in REST that dictates the expected behavior with respect to Child entities when I use an HTTP PUT on Parent record?
没有
- REST 没有“实体”或“记录”。它有“资源”。
- REST 没有“children”。通用标识符拼写并不意味着两个资源之间存在关系。
PUT /parents HTTP/1.1
Content-Type: application/json
{
"id": 1,
"children": [
{"id": 2, ...}, // I changed a property in here
],
...
}
此消息的意思是“使资源/parents 的表示与此消息的正文相匹配”。换句话说,将我的这份文件副本保存在您的文件之上。
在这种情况下,它表示 children 数组中应该只有一个条目,id:2。
服务器如何执行此操作是隐藏在 REST facade 后面的实现细节。消息只描述客户想要什么,而不描述客户得到什么。服务器拥有自己的资源,并且可以自由选择如何修改它们。这可能包括删除底层实体,或将它们标记为生命周期结束,或在不更改它们的情况下将它们从列表中删除,甚至 none 这些东西。
服务器确实需要对其响应稍微小心一些,以确保不要暗示新的表示与请求的正文匹配,除非这确实是它所做的。