当我的JsonAPI被要求执行已经完成或没有意义的操作时,我应该返回什么响应(代码+内容)?
示例:假设我想要一篇文章发布。文章草稿通过特定的端点更新(此处不相关),并且有一个特定的端点用于发布(我们感兴趣的响应)
4种不同的场景,我需要弄清楚每次发送什么类型的响应:
从未请求过出版物,并且该文章包含所有出版物必填信息,请求发布是有意义的,因此我将返回202已接受的回复,其中包含“发布请求的属性”属性
已经发送/确认了成功的出版物发布请求,没有人有时间在其间进行审核。我该怎么回事?
之前的发布请求已由某人审核并已接受(该文章现已发布)。 API再次收到已发布的本文的发布请求,它没有意义,我应该返回什么?
该文章没有填写所有必填信息,有人提出了发布请求。我必须通知用户他的请求因错误而未被授予。我正在考虑这个我可以返回验证错误列表。听起来很公平吗?
答案 0 :(得分:1)
你的前两颗子弹......
...可接受202接受:
202接受:已接受请求进行处理,但处理尚未完成。该请求最终可能会或可能不会被执行,并且在处理时可能会被禁止。
你的第三颗子弹:
我可能会在这里使用303重定向:
303参见其他:可以使用GET方法在另一个URI下找到对请求的响应。当收到POST(或PUT / DELETE)时,客户端应该假设服务器已经收到数据,并且应该发出带有单独GET消息的重定向。
但你也可以考虑308永久重定向:
308永久重定向(RFC 7538):应使用其他URI重复请求和所有将来的请求。 307和308并行302和301的行为,但不允许HTTP方法改变。因此,例如,将表单提交到永久重定向的资源可能会顺利进行。
但是我倾向于303。
你的最后一颗子弹:
这是一个标准的"糟糕的客户请求" (4xx)有错误:
400 Bad Request:由于明显的客户端错误(例如,格式错误的请求语法,太大的大小,无效的请求消息框架或欺骗性请求路由),服务器无法或不会处理请求
在枚举回复中的错误时,请确保不要公开服务的实施细节。
记住: