REST和PHP多文件上传:如果某些(但不是全部)文件无法上传,http状态应该返回什么?

REST and PHP multifile upload: what http status should return if some (but not all) files fail to upload?

所以,我正在构建一个基于PHP的CMS应用程序,该应用程序基于RESTful原则(虽然它肯定会转向它们),而且我遇到了一个两难的困境:

在POST一个上传多个文件的表单并且某些上传成功而另一些因文件名冲突而失败时返回的正确HTTP状态是什么?"409 Conflict"似乎对每个失败的上传都有意义,但对于包含一系列成功和失败的上传的整体POST,它似乎并不那么明确。

我的困惑是基于我认为多文件上传构成单个POST请求,而不是每个上传文件的POST请求。 那是对的吗?


你是对的。如果要POST集合,则集合本身就是资源。因此,如果创建了集合资源,则返回201.如果已接受但未完全处理,则返回202。

如果您在服务器上使用多个文件实现资源的一部分,并且已经存在的文件妨碍了成功的POST,那么您将返回409而不创建集合资源并使整个操作失败。从REST的角度来看,这是一个原子操作。

另一方面,如果您支持此资源的PUT操作,则必须支持幂等性。因此,一种行为可能是简单地将作为资源一部分存在的任何文件替换为PUT主体所包含的内容。您也可以考虑对POST执行此操作,但这仅在现有文件名最多属于一个集合资源时才有效。否则你最终可能会破坏别人的收藏品。