【发布时间】:2021-05-27 19:57:13
【问题描述】:
假设我有一个处理 POST 请求的函数,它对 POST 请求采用以下表示:
'
{
"name": "name",
"nestedObject": {
"prop1": "v1",
"prop2": "v2"
}
}
'
但是,对于 PUT/PATCH 请求,我更方便的是使用(已经存在的)对象的 URL 使其成为顶级对象的嵌套对象,而不是传递其数据,如下所示:
'
{
"name": "updatedName",
"nestedObject": "http://alreadyExistingObjectUrl"
}
'
'
{
"name": "name",
"nestedObject": {
"prop1": "v1",
"prop2": "v2"
}
}
'
为不同的方法使用不同的资源表示是否是一种好习惯? POST 获取嵌套对象数据并创建它,PUT/PATCH 仅获取已经存在的对象 url 并使该对象嵌套在父对象中。 GET 返回嵌套对象数据,而不是 URL。
【问题讨论】:
-
如果你打算对不同的动作使用不同的表示,最好不要重载特定键的含义。也就是说,如果在
PUT的情况下,"nestedObject"将引用一个 url,请考虑将其重命名为"nestedObjectUrl"以避免混淆。 -
但是通常允许或应该避免对不同的操作使用不同的表示?
-
REST 不是一个超级严格的定义,但我同意@Evert 的回答,即能够通过使用您收到的相同对象发出
PUT请求来更新您的对象真是太好了GET请求。