首页 文章

对于已执行或不需要的操作,API响应应该是什么

提问于
浏览
1

当我的JsonAPI被要求执行已经完成或没有意义的操作时,我应该返回什么响应(代码内容)?

示例:假设我想要一篇文章发布 . 文章草稿通过特定的 endpoints 更新(此处不相关),并且有一个特定的 endpoints 用于发布(我们感兴趣的响应)

4个不同的scenarii,我需要弄清楚每次发送什么类型的响应:

  • 从未请求过出版物,并且该文章包含所有出版物必填信息,请求发布是有意义的,因此我将返回202已接受的回复,其中包含“请求发布”属性的文章资源

  • 已经发送/确认了成功的出版物发布请求,没有人有时间在其间进行审核 . 我该怎么回事?

  • 之前的出版物申请已由某人审核并被接受(该文章现已发布) . API再一次收到已发布的本文的发布请求,它没有意义,我应该返回什么?

  • 本文没有填写所有必填信息,有人提出了发布请求 . 我必须通知用户他的请求因错误而未被授予 . 我正在考虑这个我可以返回验证错误列表 . 听起来很公平 ?

1 回答

  • 1

    你的前两颗子弹......

    • 从未请求过发布,并且该文章包含所有发布必需信息,请求发布是有意义的,因此我将返回202已接受的响应,其中包含"publication requested at"属性的文章资源

    • 已经发送/确认了成功的出版物发布请求,没有人有时间在其间进行审核 . 我该怎么回事?

    ......可接受202接受:

    202 Accepted:已接受请求进行处理,但处理尚未完成 . 该请求最终可能会或可能不会被执行,并且在处理发生时可能不被允许 .

    你的第三个子弹:

    • 之前的出版物申请已由某人审核并被接受(该文章现已发布) . API再一次收到已发布的本文的发布请求,它没有意义,我应该返回什么?

    我可能会在这里使用303重定向:

    303请参阅其他:可以使用GET方法在另一个URI下找到对请求的响应 . 当接收到POST(或PUT / DELETE)时,客户端应该假设服务器已经接收到数据,并且应该发出带有单独GET消息的重定向 .

    但你也可以考虑308永久重定向:

    308永久重定向(RFC 7538):应使用另一个URI重复请求和所有将来的请求 . 307和308并行302和301的行为,但不允许HTTP方法改变 . 因此,例如,将表单提交给永久重定向的资源可能会顺利进行 .

    但我倾向于303 .

    你的最后一颗子弹:

    • 本文没有填写所有必填信息,有人提出了发布请求 . 我必须通知用户他的请求因错误而未被授予 . 我正在考虑这个我可以返回验证错误列表 . 听起来很公平 ?

    这是标准的“错误客户端请求”(4xx),其中包含错误:

    400错误请求:由于明显的客户端错误(例如,格式错误的请求语法,太大的大小,无效的请求消息成帧或欺骗性请求路由),服务器不能或不会处理请求 .

    当您枚举响应中的错误时,请确保不要公开服务的实现细节 .

    记得:

    • 2xx 回复表明成功

    • 3xx 响应表示重定向

    • 4xx 响应表明客户端失败

    • 5xx 响应表示为请求提供服务的应用程序出现故障

    资料来源:List of HTTP status codes

相关问题