当我的JsonAPI被要求执行已经完成或没有意义的操作时,我应该返回什么响应(代码内容)?
示例:假设我想要一篇文章发布 . 文章草稿通过特定的 endpoints 更新(此处不相关),并且有一个特定的 endpoints 用于发布(我们感兴趣的响应)
4个不同的scenarii,我需要弄清楚每次发送什么类型的响应:
-
从未请求过出版物,并且该文章包含所有出版物必填信息,请求发布是有意义的,因此我将返回202已接受的回复,其中包含“请求发布”属性的文章资源
-
已经发送/确认了成功的出版物发布请求,没有人有时间在其间进行审核 . 我该怎么回事?
-
之前的出版物申请已由某人审核并被接受(该文章现已发布) . API再一次收到已发布的本文的发布请求,它没有意义,我应该返回什么?
-
本文没有填写所有必填信息,有人提出了发布请求 . 我必须通知用户他的请求因错误而未被授予 . 我正在考虑这个我可以返回验证错误列表 . 听起来很公平 ?
1 回答
你的前两颗子弹......
从未请求过发布,并且该文章包含所有发布必需信息,请求发布是有意义的,因此我将返回202已接受的响应,其中包含"publication requested at"属性的文章资源
已经发送/确认了成功的出版物发布请求,没有人有时间在其间进行审核 . 我该怎么回事?
......可接受202接受:
你的第三个子弹:
我可能会在这里使用303重定向:
但你也可以考虑308永久重定向:
但我倾向于303 .
你的最后一颗子弹:
这是标准的“错误客户端请求”(4xx),其中包含错误:
当您枚举响应中的错误时,请确保不要公开服务的实现细节 .
记得:
2xx 回复表明成功
3xx 响应表示重定向
4xx 响应表明客户端失败
5xx 响应表示为请求提供服务的应用程序出现故障
资料来源:List of HTTP status codes