在我的 HTTP API 中,其中一个端点应返回一个随机生成的值,并且该值将与端点的经过身份验证的调用方相关联。目前,我有以下结构:
GET http://example.com/random-ticket HTTP/1.1
Authorization: Basic base64-encoded-basic-auth-value
Accept: application/json
Host: example.com
HTTP/1.1 200 OK
Cache-Control: no-cache
Content-Type: application/json; charset=utf-8
Date: Thu, 03 Oct 2013 07:25:56 GMT
Content-Length: 59
{"user-ticket":"Pfa42634e-1a2e-4a7d-84b9-2d5c46a8dd81"}
发出 GET 请求以检索随机值。然而,HTTP GET calls should be idempotent而我的上述实现不遵守该规则。另一方面,我不确定是否可以发出带有空消息正文的 HTTP POST 请求。
HTTP book 执行此类操作的正确方法是什么?
最佳答案
- Safe => 调用是否会导致服务器上的状态发生变化。
- 幂等性 => 多次调用是否会导致服务器发生相同的变化。
所以问题不在于返回的数据。相反,它是服务器状态:因此,如果您将此值存储在服务器上,这会导致状态发生变化,那么它不适合 GET。否则如果是返回的数据就好了。调用http://stackoverflow.com如果间隔 10 分钟调用,将返回不同的数据。
让我们看另一个例子,返回当前时间的时钟服务。每次调用时,都会得到不同的值,但调用本身不会导致服务器上的状态发生变化,因为时钟状态是单独维护的。所以在这里使用GET是一个不错的选择。
关于http - 通过 HTTP API 生成随机值的空 HTTP POST 请求或 GET 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19265970/