我们拥有所有用户都可以免费使用的 REST API 端点,以及用户在明确启用并支付某些特定功能后可以使用的其他端点。
如果用户未启用,从付费端点返回的正确状态代码应该是什么?
我看到 2 个选项:
402 被描述为保留供将来使用的非标准客户端错误状态响应代码,所以我认为这不是适合这种情况的正确状态代码。
还有其他更适合这种情况的状态代码吗?
我会选择 403 Forbidden。这基本上就是归结起来的。您尝试访问您无权访问的端点。
用户可以自己启用它这一事实并没有太大改变。只要他们不这样做,它就仍然是被禁止的。
引用规格:
403(禁止)状态码表示服务器理解 请求但拒绝授权。 想要制作的服务器 公众可以在以下位置描述该请求被禁止的原因: 响应负载(如果有)。
因此,添加响应正文绝对是件好事,解释错误发生的原因以及用户如何授予自己访问权限。
只要402需要付款是“保留供将来使用”,我就会避免它。 REST API 通常通过使用库发出 HTTP 请求的脚本进行访问。如果脚本无法识别 402,则可能会导致意外行为。大多数人可能会做得很好,但与其后悔,不如保存。
其他 4xx 状态代码(这绝对属于)不适用于此场景。
423 HTTP 状态似乎最相关(RFC-4986):
HTTP 423 Locked 客户端错误响应状态代码表示资源已锁定,这意味着无法访问该资源。其响应正文应包含 WebDAV 的 XML 格式的信息。
HTTP/1.1 423 Locked
Content-Type: application/xml; charset="utf-8"
Content-Length: xxxx
<?xml version="1.0" encoding="utf-8" ?>
<D:error xmlns:D="DAV:">
<D:lock-token-submitted>
<D:href>/workspace/webdav/</D:href>
</D:lock-token-submitted>
</D:error>
但我更喜欢 JSON 正文。