根据HTTP/1.1规范:
该
POST方法用来请求原始服务器接受被附在请求由标识的资源的新下属实体Request-URI的Request-Line
换句话说,POST用于创建.
该
PUT方法请求将所包含的实体存储在提供的实体下Request-URI.如果Request-URI引用已经存在的资源,则封闭的实体应该被视为驻留在源服务器上的实体的修改版本.如果Request-URI未指向现有资源,并且该URI能够被请求用户代理定义为新资源,则源服务器可以使用该URI创建资源.
也就是说,PUT用于创建或更新.
那么,应该使用哪一个来创建资源?或者需要支持两者?
我一直在阅读put和post请求之间的区别,我有一些与rails相关的问题:我想更改已经创建的行中的一个特定字段...我应该使用put还是post请求?例如以下不同?
#Assume this is a put request
def update
@model=Model.find(x)
@model.field="new_field"
@model.save
end
#Assume this is a post request
def update
@model=Model.find(x)
@model.field="new_field"
@model.save
end
#What if I use the rails update method?
def update
@model=Model.find(x)
@model.update(model_params)
@model.save
end
Run Code Online (Sandbox Code Playgroud)
提前致谢.
我试图将文件直接上传到dropbox [来自浏览器/网络应用程序],代码API上的"uploadFile"函数需要在服务器上上传文件,这给我带来了麻烦,因为我不想要任何要上传到我的服务器并从那里到dropbox的文件.
$f = fopen("test.jpg", "rb"); // requires file on server
$result = $dbxClient->uploadFile("test.jpg", dbx\WriteMode::add(), $f);
fclose($f);
Run Code Online (Sandbox Code Playgroud)
试过这个https://github.com/dropbox/dropbox-js失望地说没有明确的文档,文档部分的许多链接都被破坏了.
我需要将文件上传到我的帐户,客户端无需登录到Dropbox.
任何指针都会非常感激.寻找Ajax/JavaScript方法.
更新
我尝试了以下内容,但没有来自Dropbox的回复
HTML
<input type="file" name="file" id="file" onchange="doUpload(event)">
Run Code Online (Sandbox Code Playgroud)
JavaScript的
var doUpload = function(event){
var input = event.target;
var reader = new FileReader();
reader.onload = function(){
var arrayBuffer = reader.result;
$.ajax({
url: "https://api-content.dropbox.com/1/files_put/auto/uploads/" + input.files[0].name,
headers: {
Authorization: 'Bearer ' + MyAccessToken,
contentLength: file.size
},
crossDomain: true,
crossOrigin: true,
type: 'PUT',
contentType: input.files[0].type,
data: arrayBuffer,
dataType: 'json',
processData: false, …Run Code Online (Sandbox Code Playgroud) 我有一个 zip 文件需要上传。当我使用 CURL 命令时,它正在上传它,但是当我使用 Python 请求尝试相同的操作时,我得到了HTTP 405 Method Not Allowed. zip 文件通常约为 500kb。
卷曲命令 -
curl -u<username>:<password> -T /log/system/check/index.zip "<target URL>"
Python脚本(尝试了2种不同的方法)-
1:
import requests
files = {'file': open('/log/system/check/index.zip', 'rb')}
r = requests.post(url, files=files, auth=('<username>', '<password>'))
Run Code Online (Sandbox Code Playgroud)
2:
import requests
fileobj = open('/log/system/check/index.zip', 'rb')
r = requests.post(url, auth=('<username>', '<password>'), files={"archive": ("index.zip", fileobj)})
Run Code Online (Sandbox Code Playgroud)
我错过了一些明显的东西吗?
我不知道POST和PUT方法之间的确切区别。有些人在网上说当你更新记录时你必须使用PUT方法而不是POST,我不知道这是真的吗?
如果您的网站 URL 采用 POST 方法,则形成 Internet 1. www.example.com/user/{id}/update :- PUT 使用 2. www.example.com/user/update :- POST 使用 这是否正确?
应用程序中有一些users有偏好的内容 - 最喜欢的作者。用户可以更改此列表。作者位于实体authors的集合中User:
@Entity
public class User {
@Id
....
@ElementCollection
private List<String> authors=new ArrayList<>();
}
Run Code Online (Sandbox Code Playgroud)
用户可以编辑他的个人资料并通过添加或删除作者来更改此列表。一方面,添加或删除作者意味着只需编辑个人资料,这就是我目前使用以下PUT方法的原因:
@PutMapping("/api/profile/author/add")
@PutMapping("/api/profile/author/remove")
Run Code Online (Sandbox Code Playgroud)
但我不确定这是否正确。另一种变体是在用户添加和删除项目时使用POST和方法:DELETE
@PostMapping("/api/profile/author/add")
@DeleteMapping("/api/profile/author/remove")
Run Code Online (Sandbox Code Playgroud)
那么什么是正确的变体,原因是什么?
在REST中,完整的API有一些方法名称,如(GET,PUT,POST等),用于某些特定操作(CRUD)但我可以使用任何方法执行任何操作
数据库操作示例:
我可以使用GET方法创建或插入新文档或删除或更新.
我可以使用POST方法发布或更新或删除.
我可以使用PUT方法删除或更新或删除.
我可以使用任何一种方法执行DB(CRUD)操作
那么,为什么需要这个方法来指定何时调用任何其他完整的API?
post ×3
put ×3
rest ×3
http ×2
curl ×1
dropbox ×1
dropbox-api ×1
javascript ×1
jquery ×1
laravel ×1
python ×1
spring-mvc ×1