不要在不适合的地方,强行套用 RESTful,并不是所有的接口都可以 RESTful 化。 对于文件上传,大部分情况下应当还是使用 POST 的方式,尤其是上面代码里面示例中同时有表单和文件的情况。 除了发送还应当考虑服务端接收,以 PHP 为例,如果你使用 POST 上传文件的方式,那么你在后端是可以直接使用 $_FILES 来获取上传好的文件信息进行处理,但是如果你使用 PUT ,就需要你自己去获取原始请求体进行解析,请求提就有可能是一个 multipart/form-data 、也有可能是 application/x-www-form-urlencoded ,对于后端开发来说并不是那么的妙。 除此之外,虽然在 RESTful 中,对于 PUT 的定义是全量更新。而在其他的一些常见,对于文件而言,PUT 更有写入的意思,也就是常见的 对象存储(OSS) 对于这类业务来说, PUT 就可以被认为是要写入一个文件,整个请求体中,就只有文件的原始内容。 在业务中, 对于文件上传的处理,大多数时候,都是提供一个单独的文件上传接口进行上传,所有的上传都是通过这一个接口来完成。在文件上传完成后,接口返回文件的下载地址或者一个ID,用于存储,这样也更加便于统一管理上传资源,而不是担心某天在哪个接口突然又加了一个文件上传,为了这种情况又去修改那个接口的代码。
你要你愿意,你甚至可以用 GET 请求上传文件,因为怎么处理请求完全是后端行为。 不过尽可能符合HTTP语义是约定俗成的行为,不管你用不用REST风格。 按照HTTP语义, GET 请求应该是读取服务器资源, PUT 请求和 POST 请求应该都是修改服务器资源,并且 GET 和 PUT 应该是幂等操作,而 POST 不保证幂等性。 按照这个大原则去设计即可。