你的前两颗子弹...
- 从未请求发布,并且该文章具有所有发布强制信息,请求发布是有意义的,因此我将返回一个 202 接受的响应,其中包含“发布请求在”属性的文章资源
- 一个成功的发布发布请求已经发送/确认,并且没有人有时间在这之间进行审查。我应该返回什么?
...符合 202 接受:
202 Accepted:请求已被接受处理,但处理尚未完成。该请求最终可能会或可能不会被执行,并且在处理发生时可能会被拒绝。
你的第三个子弹:
- 以前的发布请求已被某人审核并接受(文章现已发布)。API再次接收到这篇文章的发布请求,已经发布了,没有意义,我应该返回什么?
我可能会在这里使用 303 重定向:
303 See other:可以使用 GET 方法在另一个 URI 下找到对请求的响应。当收到响应 POST(或 PUT/DELETE)时,客户端应假定服务器已收到数据,并应使用单独的 GET 消息发出重定向。
但您也可以考虑使用 308 永久重定向:
308 永久重定向 (RFC 7538):应使用另一个 URI 重复请求和所有未来的请求。307 和 308 与 302 和 301 的行为平行,但不允许更改 HTTP 方法。因此,例如,将表单提交到永久重定向的资源可能会顺利进行。
但我倾向于303。
最后一个子弹:
- 文章未填写所有必填信息,有人提出发布请求。我必须通知用户他的请求由于错误而没有被批准。我在想这个我可以返回验证错误列表。听起来很公平 ?
这是一个标准的“错误客户端请求”(4xx),有错误:
400 Bad Request:由于明显的客户端错误(例如,格式错误的请求语法、太大、无效的请求消息帧或欺骗性请求路由),服务器无法或不会处理请求。
只需确保在枚举响应中的错误时不公开服务的实现细节。
记住:
- 2xx响应表示成功
- 3xx响应表示重定向
- 4xx响应表示客户端失败
- 5xx响应表示服务请求的应用程序部分失败
来源:HTTP 状态码列表