对于订阅取消异常,哪个 HTTP 状态代码是正确的?

Which HTTP status code is correct for Subscription cancel exception?

对于 Subscription Canceled 异常,哪个 HTTP status code 是正确的?

我需要在用户尝试访问某个页面时抛出异常。

我检查了一些状态,比如Payment Required,但不满足要求。有什么建议吗?

我会说正确的响应代码是:

401 Unauthorized

由于根据定义,用户取消了他的订阅并且不能再访问付费内容,因此用户未被授权。 换句话说,用户已通过身份验证但未授权执行此请求。

Which HTTP status code is correct for Subscription cancel exception?

HTTP 状态代码属于 transfer documents over a network 域。

因此,您的 域中发生的具体情况并不特别重要 - 我们的想法是了解文档传输方面的错误情况,然后从那里开始工作.

在这种情况下,最合适的可能是 403 Forbidden

The 403 (Forbidden) status code indicates that the server understood the request but refuses to authorize it. A server that wishes to make public why the request has been forbidden can describe that reason in the response payload (if any).

想象一下这个例子在网站上的表现可能会有所帮助。对于人类用户,您会 return 一堆 HTML 解释他们的订阅已被取消,也许还有指向允许用户 re-subscribe 的资源的链接,等等。

对于浏览器,您将拥有 HTTP 元数据,包括状态代码,以便浏览器能够理解消息的通用语义(例如,应该资源的早期表示是 invalidated in the cache).

it's a API request from front-end.

这个不进入讨论; uniform interface 的动机是我们可以交换对话两端的实现和自我描述消息的语义不要改变.

我想提供一个替代解决方案。 403 错误在这里很有意义,因为资源访问被拒绝。但是,这在前端可能很难处理,因为它与由于缺少权限或角色导致的 403 错误无法区分。 402 错误是非标准的,但“需要付款”会更容易编程。如果允许使用非标准 HTTP 代码,我认为这是基于取消订阅或缺少有效订阅的 API 更适合 return 的状态。