0

我正在编写一个 API 并被困在 UPDATE 部分的事情上。根据我对 REST 的阅读,更新操作应该使用 HTTP PUT 公开。

好的,PUT 只给了我一个数据流。至少在 PHP 中,这些数据的解码是我的责任。那么如何混合字符串数据和文件上传并使用 PUT 呢?我知道我可以在 POST 中做到这一点,但我正在尝试以 RESTful 方式做到这一点。

我应该使用 multipart/form-data 并且 PUT 是否可移植(我的意思是用不同的语言发送这种请求很容易)?我试图找出proper方法来做到这一点。同样,如果我使用 multipart/form-data 我负责解析,因此可能会出现一些错误或性能下降。如果这个 multipart/... 是我所要求的方法,你能建议一个解析器吗?

谢谢

4

2 回答 2

2

PUT 的一般规则是幂等的

调用 2xPUT /user/{userId}/files/foo.txt最终会处于相同的状态,而在第二次调用中,您只需覆盖 foo.txt。你正在“设置”事物。

调用 2xPOST /user/{userId}/files最终会出现在两个不同的文件中。你正在“添加”东西。

因此,如果您想写入专用目标,我会使用 PUT。您要上传什么样的文件。例如,如果它是图片上传,我会使用 POST(您可以在其中获得响应中的目标 url)。如果您正在为用户设计一种文件存储,我会使用 PUT,因为很可能用户想要写入(设置)到某个位置(就像您在普通文件系统上一样)。

也许您对具体案例有更多详细信息/要求?

于 2011-07-06T19:57:15.213 回答
2

你试图获取什么样的数据PUT?请记住,PUT 是一种定向发布方法。客户端将数据发送到服务器,基本上说“PUT这个文件到 /home/sites/.../myfile.txt”。

当您将数据发布到站点并创建新页面时很有用。如果它是标准文件上传表单(“在此处上传头像图像!”),则不是那么有用。您不想让潜在的恶意用户指定上传文件的位置。

那是你使用 POST 的时候,它翻译成“这是一个文件,它叫做 myfile.txt,用它做你想做的事”。

于 2011-07-06T14:48:19.730 回答