根据HTTP/1.1规范:
该
POST
方法用来请求原始服务器接受被附在请求由标识的资源的新下属实体Request-URI
的Request-Line
换句话说,POST
用于创建.
该
PUT
方法请求将所包含的实体存储在提供的实体下Request-URI
.如果Request-URI
引用已经存在的资源,则封闭的实体应该被视为驻留在源服务器上的实体的修改版本.如果Request-URI
未指向现有资源,并且该URI能够被请求用户代理定义为新资源,则源服务器可以使用该URI创建资源.
也就是说,PUT
用于创建或更新.
那么,应该使用哪一个来创建资源?或者需要支持两者?
首先,一些定义:
PUT在第9.6节RFC 2616中定义:
PUT方法请求将所包含的实体存储在提供的Request-URI下.如果Request-URI引用已经存在的资源,则封闭的实体应该被视为驻留在源服务器上的实体的修改版本.如果Request-URI未指向现有资源,并且该URI能够被请求用户代理定义为新资源,则源服务器可以使用该URI创建资源.
PATCH在RFC 5789中定义:
PATCH方法请求将请求实体中描述的一组更改应用于Request-URI标识的资源.
另外根据RFC 2616第9.1.2节, PUT是幂等的,而PATCH则不是.
现在让我们来看一个真实的例子.当我/users
使用数据进行POST {username: 'skwee357', email: 'skwee357@domain.com'}
并且服务器能够创建资源时,它将响应201和资源位置(假设/users/1
),并且/users/1
将返回对GET的任何下一次调用{id: 1, username: 'skwee357', email: 'skwee357@domain.com'}
.
现在假设我要修改我的电子邮件.电子邮件修改被视为"一组更改",因此我应该修补/users/1
" 补丁文档 ".在我的情况下,它将是一个json {email: 'skwee357@newdomain.com'}
.然后服务器返回200(假设权限正常).这让我想到第一个问题:
PATCH是一个相对较新的动词(2010年3月引入的RFC),它解决了"修补"或修改一组字段的问题.在引入PATCH之前,每个人都使用PUT来更新资源.但是在引入PATCH之后,让我感到困惑的是当时使用的PUT是什么?这让我想到了第二个(也是主要的)问题:
/users
替换整个集合.在引入PATCH之后,在特定实体上发布PUT是没有意义的.我错了吗?GET
:$.get(..)
POST
:$.post()..
怎么样PUT/DELETE
?
我想知道人们对RESTful PUT
操作的看法是什么,它在响应体中没有返回任何内容(null).
我需要PUT
在python中使用HTTP将一些数据上传到服务器.从我对urllib2文档的简要介绍来看,它只能用于HTTP POST
.有没有办法PUT
在python中做HTTP ?
我PUT
在我的Rails应用程序中使用了一个请求.现在,PATCH
浏览器已经实现了一个新的HTTP动词.所以,我想知道PATCH
和PUT
请求之间的主要区别是什么,以及什么时候应该使用其中一个.
我想知道是否可以将PUT,DELETE请求(实际上)发送java.net.HttpURLConnection
到基于HTTP的URL.
我已经阅读了很多文章,描述了如何发送GET,POST,TRACE,OPTIONS请求,但我仍然没有找到任何成功执行PUT和DELETE请求的示例代码.
如何使用cURL在PHP中执行RAW POST?
没有任何编码的原始帖子,我的数据存储在一个字符串中.数据应格式如下:
... usual HTTP header ...
Content-Length: 1039
Content-Type: text/plain
89c5fdataasdhf kajshfd akjshfksa hfdkjsa falkjshfsa
ajshd fkjsahfd lkjsahflksahfdlkashfhsadkjfsalhfd
ajshdfhsafiahfiuwhflsf this is just data from a string
more data kjahfdhsakjfhsalkjfdhalksfd
Run Code Online (Sandbox Code Playgroud)
一种选择是手动编写正在发送的整个HTTP标头,但这似乎不太理想.
无论如何,我可以只将选项传递给curl_setopt(),说使用POST,使用text/plain,并从一个$variable
?发送原始数据?
我正在尝试使用Alamofire快速发布一个关于身体的帖子请求.
我的json身体看起来像:
{
"IdQuiz" : 102,
"IdUser" : "iosclient",
"User" : "iosclient",
"List":[
{
"IdQuestion" : 5,
"IdProposition": 2,
"Time" : 32
},
{
"IdQuestion" : 4,
"IdProposition": 3,
"Time" : 9
}
]
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试let
list
使用NSDictionnary,它看起来像:
[[Time: 30, IdQuestion: 6510, idProposition: 10], [Time: 30, IdQuestion: 8284, idProposition: 10]]
Run Code Online (Sandbox Code Playgroud)
我使用Alamofire的请求看起来像:
Alamofire.request(.POST, "http://myserver.com", parameters: ["IdQuiz":"102","IdUser":"iOSclient","User":"iOSClient","List":list ], encoding: .JSON)
.response { request, response, data, error in
let dataString = NSString(data: data!, encoding:NSUTF8StringEncoding)
println(dataString)
}
Run Code Online (Sandbox Code Playgroud)
请求有一个错误,我相信问题是在字典列表,因为如果我提出一个没有列表的请求它工作正常,所以任何想法?
我尝试过建议的解决方案,但我遇到了同样的问题:
let json = ["List":list,"IdQuiz":"102","IdUser":"iOSclient","UserInformation":"iOSClient"] …
Run Code Online (Sandbox Code Playgroud) put ×10
http ×5
post ×3
rest ×3
json ×2
alamofire ×1
curl ×1
http-delete ×1
http-method ×1
http-verbs ×1
httprequest ×1
java ×1
jquery ×1
patch ×1
php ×1
python ×1
resources ×1
service ×1
swift ×1