json - REST API - 是否允许对 POST 和 PUT/PATCH 使用不同的表示?
问题描述
假设我有一个处理 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。
解决方案
如果您需要不同的格式,最好为每种格式定义特定的 mimetype。
通常,允许用户执行以下操作是一个非常好的设计属性:
foo = resource.get();
foo.name = 'new name';
resource.put(foo);
基本上,如果我可以假设GET
返回的格式可以在请求中重复使用PUT
,这也意味着服务器可以添加新的必需属性,这仍然有效。
无论如何,这是一个最佳实践,但不是硬性建议。如果 和 的表示PUT
不同,GET
我会期待不同的 mimetype。
推荐阅读
- python - 在 for 循环中一次创建多个数据帧
- matlab - 连接等高线的极值点
- python - Pandas read_csv 加载不规则行的数据
- angular - NgRx Effects 将动作和选择器与道具结合起来
- css - 不同的浏览器以不同的方式呈现我的网站字体
- c# - MonthCalendar 控件在不同系统上更改大小,如何适应表格以适应?
- java - 使用流将图像从文件夹添加到数组列表
- regex - Perl 正则表达式发现值太小并附加
- python - 将 .py 文件和图像转换为独立的可执行文件
- symfony - Symfony 序列化程序问题 - NotNormalizableValueException