当前位置: 首页 > 知识库问答 >
问题:

使用不完全表示的PUT方法

盖博简
2023-03-14
{'id': 1,
 'username': 'joedoe',
 'email': 'joe@doe.com',
 'password_hash': '9039dmk38f84uf4029i339kf32f0932i',
 'last_visit': '2013-11-04 21:09:01',
 'public': true,
 '_links': {'self': {'href': 'http://foo.bar.com/api/users/1'}}

}
PUT /api/users/1

{'username': 'joeydoey',
 'email': 'joey@doey.com'}

1和2都是有效的,因为没有标准化的行为,由媒体类型决定如何处理它。这感觉不对,因为PUT不是从属于资源本身,而是替换资源。

请记住,我不是在问什么是正确的,什么是有意义的。我在问哪一个是标准支持的。

共有1个答案

何麻雀
2023-03-14

只要PUT的结果完全替代了客户机对资源的理解(即,那些未传递的属性的先前值不会影响PUT之后的值),它就应该成功。然而,这确实让它看起来有点困惑,因为许多人倾向于将PUT与字段级更新语义(而不是完全替换)混淆起来。

虽然这里从技术上讲没有违反REST约束,但传递所有值而不求助于服务器默认值可能是一个更好的主意,因为这将有助于保持向前兼容性。默认值会随着时间的推移而变化,因此通常应该避免。

但是,您的链接示例并不是指不传递默认值,因此它不是“不完整表示”的好示例。相反,链接不是客户端对服务器的资源表示的一部分。我认为您在这里引入了另一个概念:只从服务器返回给客户机的属性。这就是我在引发这篇文章的另一个帖子上所说的。

因此,让我用Accept和Content-Type头来装饰您的示例,以说明我的观点。

请求

PUT /api/users/1 HTTP/1.1
Content-Type: application/vnd.example.api.client+json

{'username': 'joeydoey',
 'email': 'joey@doey.com'}

回应

200 OK
Content-Type: application/hal+json;profile=application/vnd.example.api.server

{'id': 1,
 'username': 'joeydoey',
 'email': 'joey@doey.com',
 'password_hash': '9039dmk38f84uf4029i339kf32f0932i',
 '_links': {'self': {'href': 'http://foo.bar.com/api/users/1'}}
}
 类似资料:
  • 所以我在ReactJS中做了一个排序可视化。 我有一个名为“bubblesort”的方法,它将遵循气泡排序算法对数组进行排序。 我有一个数组生成并在屏幕上可视化,名为“array”。 现在当我使用 它将对数组进行排序,并在每次加载页面时自动更改可视化数组。它不是我想要的,我想让它对数组进行排序,并在我单击按钮时改变可视化。所以我又做了一个这样的方法 并像这样调用按钮,它将对数组进行排序,但屏幕上的

  • 本文向大家介绍C#中label内容显示不全、不完整的解决方法,包括了C#中label内容显示不全、不完整的解决方法的使用技巧和注意事项,需要的朋友参考一下 c# label的内容显示不全,需要设置如下属性即可: 1、将Lable的font属性的字体改成宋体; 2、将AutoSize属性改成true;

  • 我一直在为一个即将到来的项目使用JFreeChart进行实验,看着教程,它们似乎非常直截了当。我创建了一个简单的小程序,它要求一些数据并显示一个3D饼图。它可以工作,但当在面板中显示图表时,它只显示部分图表。如果单击面板内部,它将增长到显示面板的大小。我尝试在不同的地方设置不同的setPreferredSize(),但似乎都不起作用。我错过了什么?

  • 本文向大家介绍Java WeakHashMap put()方法与示例,包括了Java WeakHashMap put()方法与示例的使用技巧和注意事项,需要的朋友参考一下 WeakHashMap类方法 put()方法在java.util包中可用。 当给定键元素(key_ele)不存在值元素(val_ele)时,使用put()方法将给定值元素(val_ele)与给定键元素(key_ele)映射到该映

  • 问题内容: 尽管包括我,但我得到一个错误,说那是不完整的类型。 我不知道该怎么办。 请帮忙 错误消息: 问题答案: 只是 在代码中的任何其他行之前,或使用定义定义预处理程序符号的选项进行编译

  • 我想在ArrayList中添加一个名称,但是当我调用put方法时,console.log显示了一个get方法。 当我调用url时 但它应该是put方法,而不是get方法,这有什么错?