REST:使用PUT通过文件上载进行更新

时间:2011-07-06 14:13:49

标签: php api rest multipartform-data put

我正在编写一个API并且陷入UPDATE部分。从我读到的关于REST的内容来看,应该使用HTTP PUT公开更新操作。

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

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

由于

2 个答案:

答案 0 :(得分:2)

您尝试PUT的数据类型是什么?请记住,PUT是一种定向发布方法。客户端将数据发送到服务器,实际上将“PUT此文件写入/ home / sites /.../ myfile.txt”。

在将数据发布到网站并创建新网页时非常有用。如果它是标准的文件上传表单(“在这里上传头像图片!”)则不太有用。您不希望允许潜在恶意用户指定上传文件的位置。

当你使用POST时,转换为“这里是一个文件,它被称为myfile.txt,用它做你想做的事情”。

答案 1 :(得分:2)

PUT的一般规则是幂等

调用2x PUT /user/{userId}/files/foo.txt会以相同的状态结束,第二次调用只会覆盖foo.txt。你正在“设定”事物。

调用2x POST /user/{userId}/files会以两个不同的文件结束。你正在“添加”东西。

因此,如果您想要写入专用目标,我会使用PUT。您要上传哪种文件?例如。如果是图片上传,我会使用POST(你会在里面得到目标网址的响应)。如果您正在为用户设计一种文件存储,我会使用PUT,因为很可能用户想要(设置)到某个位置(就像在普通文件系统上那样)。

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