所以,我正在构建一个基于 RESTful 原则的基于 PHP 的 CMS 应用程序(尽管它肯定会偏离它们),但我遇到了一些困境:
当发布一个上传多个文件的表单并且一些上传成功而另一些由于文件名冲突而失败时,返回的正确 HTTP 状态是什么?“409 冲突”似乎对每个失败的上传都有意义,但对于包含一系列成功和失败上传的整体 POST,它似乎并不那么明确。
我的困惑是基于我认为多文件上传构成单个 POST 请求,而不是每个正在上传的文件的 POST 请求。那是对的吗?
所以,我正在构建一个基于 RESTful 原则的基于 PHP 的 CMS 应用程序(尽管它肯定会偏离它们),但我遇到了一些困境:
当发布一个上传多个文件的表单并且一些上传成功而另一些由于文件名冲突而失败时,返回的正确 HTTP 状态是什么?“409 冲突”似乎对每个失败的上传都有意义,但对于包含一系列成功和失败上传的整体 POST,它似乎并不那么明确。
我的困惑是基于我认为多文件上传构成单个 POST 请求,而不是每个正在上传的文件的 POST 请求。那是对的吗?
你是对的。如果您要发布集合,则集合本身就是资源。因此,如果集合资源已创建,您将返回 201。如果它被接受但未完全处理,您将返回 202。
如果您正在使用多个文件在服务器上实现部分资源,并且已经存在妨碍 POST 成功的文件,您将返回 409 并且不创建集合资源并使整个操作失败。从 REST 的角度来看,它是一个原子操作。
另一方面,如果您要支持对该资源的 PUT 操作,则必须支持幂等性。因此,一种行为可能是简单地将作为资源一部分存在的任何文件替换为 PUT 正文中包含的文件。您也可以考虑为 POST 执行此操作,但这仅在现有文件名最多属于一个集合资源时才有效。否则,您最终可能会破坏其他人的收藏。