tug*_*erk 14 rest http web asp.net-web-api
在我的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"}
Run Code Online (Sandbox Code Playgroud)
发出GET请求以检索随机值.但是,HTTP GET调用应该是幂等的,我的上述实现不符合该规则.另一方面,我不确定是否可以使用空消息体发出HTTP POST请求.
HTTP书执行此类操作的正确方法是什么?
Ali*_*tad 15
所以问题不在于返回的数据.而是服务器状态:所以如果你将这个值存储在服务器上,这会导致状态发生变化,那么它就不适合GET.否则,如果它是返回的数据,则没关系.如果相隔10分钟,调用http://stackoverflow.com将返回不同的数据.
让我们看另一个例子,一个返回当前时间的时钟服务.每次拨打电话时,您都会获得不同的值,但由于时钟状态是单独维护的,因此呼叫本身不会导致服务器上的状态发生变化.所以在这里使用GET是一个不错的选择.
Fil*_*p W 11
HTTP中没有任何内容禁止使用带有空体的POST.
此外,消息携带一个表示,即正文+标题.在你的情况下,正文是0长度,这很好,标题是标识用户.
请参阅此处的讨论 - http://lists.w3.org/Archives/Public/ietf-http-wg/2010JulSep/0273.html
使用带有 GET 的随机生成器没有问题,因为没有存储服务器状态。以同样的方式,您可以拥有一个接受参数并在调用 GET 时添加它们的计算器。关于可缓存的问题是一个有趣的问题,尽管它并不真正适用于随机生成器,因为资源本质上没有被缓存。这仍然不能改变它可以以安全/幂等的方式设计的事实。
至于没有正文的 POST,甚至在查询字符串中使用参数,那很好。POST 的关键在于它“可能”导致服务器发生更改。也不能保证它会,但你不能假设它不会像 GET 那样。不管有没有设置任何内容,都不会改变可以改变的事实。例如,想象一个虚构的资源“\counter\increment”。每次 POST 都会导致 \counter 增加。我没有发送任何有效负载,但我导致服务器状态发生变化,因此它应该是 POST 或 PUT。
归档时间: |
|
查看次数: |
18790 次 |
最近记录: |