我知道HTTP PUT是一个幂等请求,根据定义(引自rfc)将某些内容存储在特定的URI中
The PUT method requests that the enclosed entity be stored under the supplied Request-URI.
Run Code Online (Sandbox Code Playgroud)
但是"封闭实体"的定义是什么?我似乎无法发送表单数据(例如HTTP POST请求).如何通过JSON/XML或其他序列化格式发送实体的表示?
简而言之,如何将HTTP PUT请求发送到特定URI的存储/更新信息呢?
Dar*_*rov 11
在REST中你有:
GET - retrieve resource
POST - create new resource
PUT - update existing resource
DELETE - delete resource
Run Code Online (Sandbox Code Playgroud)
因此PUT动词用于更新服务器上的现有资源.根据客户端的不同,有多种方式可以发送PUT请求.例如使用jquery AJAX:
$.ajax({
type: 'PUT',
url: '/products/123',
data: { name: 'new product name' }
});
Run Code Online (Sandbox Code Playgroud)
Cia*_*ing 11
随附的实体是HTTP消息体中包含的有效负载数据(在删除任何传输编码之后.)如果您在发送消息体时遇到问题,那么可能是您忘记包含Content-Length标头 - 这是指示HTTP消息具有正文的两种方法之一.
除了这种语义差异外,PUT与POST相同:使用POST,URI标识将处理实体的资源,例如servlet.使用PUT,URI标识实体本身,例如将使用实体主体的内容创建/替换的文件.
因此,通常会发出 HTTP PUT 请求来替换给定 URI 中当前存储的资源。例如,有一本存储在https://example.org/book/1的书,其中的数据可以用 JSON 表示,如下所示,
$ curl --request GET https://example.org/book/1
{
"title": "Stackoverflow Compilation Book 1",
"year": 2019
}
Run Code Online (Sandbox Code Playgroud)
假设有人想要修复该year领域,因为虚构的书是去年(2018 年)出版的,他/她必须通过 HTTP PUT 请求发送 COMPLETE 更新的书籍信息。
$ curl --request PUT
--header "Content-Type: application/json"
--data '{"title": "Stackoverflow Compilation Book 1", "year": 2018}'
Run Code Online (Sandbox Code Playgroud)
注意year属性的变化。
考虑到 HTTP PUT 请求本质上是一种替换操作,您还可以将 URI 表示的书替换为其他内容。例如,
$ curl --request PUT
--header "Content-Type: application/json"
--data '{"title": "Some random book that nobody publishes", "year": 2019}'
Run Code Online (Sandbox Code Playgroud)
附加的数据可以是任何格式(通常也在请求头中指定Content-Type,如上所示),只要支持,通常由Accept响应头上报(表示应用程序愿意处理的数据类型) . 进一步的验证将由应用程序代码处理以确定提交的数据是否有效。
| 归档时间: |
|
| 查看次数: |
69718 次 |
| 最近记录: |