相关疑难解决方法(0)

在HTTP 202中使用Location头是否符合RFC标准?

我与我的同事讨论了在202 Accepted响应中使用Location头的一个很好的概念.

故事从这里开始分析PHP header()函数的行为.有趣的摘录:

第二个特例是"Location:"标题.它不仅这个头发送回浏览器,但是除非201或3xx状态代码已经被设置也返回重定向(302)状态代码到浏览器.

它们未在此默认行为中包含202状态代码.看起来他们并不期望202响应有一个位置,事实上:

header("HTTP/1.1 202");
header("Location: http://example.com");
Run Code Online (Sandbox Code Playgroud)

将客户端重定向到位置URL.当然,也可以改变与header()函数的第三个参数,但一下就吸引了我的注意力被这种行为:为什么他们了解,默认202预计不会举行Location头?

然后我查看RFC,寻找202状态的官方含义.有趣的摘录:

返回此响应的实体应该包括请求的当前状态的指示,以及指向状态监视器的指针或用户可以期望满足请求的某些估计.

它没有明确地引用位置标头,就像之前(在相同的RFC文档中)201响应一样.这可能是PHP人员理解202响应不应该保持Location头的原因.指针会被解释为Location头还是PHP家伙做出了错误的假设?如果标准允许Location头有202响应:不应该像201响应定义更明确的官方文档?

最后,我回顾了最新的RFC版本,并发现编辑方面的一些变化:

与此响应发送表示应该描述请求的当前状态和(或嵌入)点状态监视器,一个当所述请求将被兑现的估计提供给用户.

同样,没有明确的假设指向 Location头.

简而言之,经过上述修订后:我是否使用带有202响应的Location标头符合RFC?

http rfc http-status-codes http-headers

19
推荐指数
3
解决办法
4344
查看次数

什么RESTful HTTP请求在服务器上执行操作?

我有一个我已经构建的RESTFul服务器API.它的某些部分不控制资源,我无法将相关的URL + HTTP方法映射到服务器上执行的操作.

例如,我可以备份服务器上的每个资源POST /backup,但我不确定这是否是最合适的映射.单个资源怎么样?我应该使用:POST /backup/id或通过将id声明为我发送的变量来指定它:POST /backup <id>

请给我一些关于如何最恰当地构建这个的提示,以便我的API易于掌握.

api rest http

13
推荐指数
2
解决办法
1万
查看次数

用于数据处理和方法链接的REST API

如果质量问题不好,我会提前道歉.我仍然开始学习REST API的概念.我正在尝试实现可扩展的REST API以进行数据处理.这是我到目前为止所能想到的.

考虑一些可以使用GET调用检索的数字数据:

GET http://my.api/data/123/
Run Code Online (Sandbox Code Playgroud)

用户可以应用一系列算术运算,例如addmultiply.一种非RESTful的方法是:

GET http://my.api/data/123?add=10&multiply=5
Run Code Online (Sandbox Code Playgroud)

Assupmtions:

  • DB中的原始数据不会更改.仅将其更改版本返回给用户.
  • 数据大小很大(比如一个大的多维数组),所以我们不能在每次操作调用时返回整个数据.相反,我们希望将操作作为批处理应用,并最终返回最终修改的数据.

我目前有2种RESTful方式可供选择:

1.将算术运算模型化为数据的子资源.

如果我们考虑add作为这里multiply的数据的子资源.在这种情况下,我们可以使用:

GET http://my.api/data/123/add/10/
Run Code Online (Sandbox Code Playgroud)

鉴于原始数据永远不会改变,这将是安全和幂等的.但是,我们需要链接多个操作.我们可以这样做吗?

GET http://my.api/data/123/add/10/multiply/5/
Run Code Online (Sandbox Code Playgroud)

在哪里multiply创建一个子资源,add/10/它本身就是一个子资源data/123

优点:

  • 无状态:服务器不保留有关已修改数据的任何信息.
  • 轻松访问修改后的数据:这只是一个简单的GET调用.

缺点:

  • 链接:我不知道它是否可以轻松实现.
  • 长URI:应用每个操作后,URI会越来越长.

2.创建可编辑的数据对象:

在这种情况下,用户创建原始数据的可编辑版本:

POST http://my.api/data/123/
Run Code Online (Sandbox Code Playgroud)

将返回

201 Created
Location: http://my.api/data/123/edit/{uniqueid}
Run Code Online (Sandbox Code Playgroud)

用户可以使用PATCH此可编辑数据

PATCH http://my.api/data/123/edit/{uniqueid}
{add:10, multiply:5}
Run Code Online (Sandbox Code Playgroud)

最后,GET编辑数据

GET http://my.api/data/123/edit/{uniqueid}
Run Code Online (Sandbox Code Playgroud)

优点:

  • 清理URI.

缺点:

  • 服务器必须保存编辑数据的状态.
  • 编辑不再是幂等的.
  • 获取编辑数据需要用户至少拨打3个电话.

是否有更清晰,更语义的方式来实现RESTful数据处理?

编辑:

如果你想知道这背后的现实问题是什么,我正在处理数字信号处理.

举个简单的例子,您可以考虑将可视过滤器应用于图像.在此示例之后,RESTful Web服务可以执行以下操作:

GET …
Run Code Online (Sandbox Code Playgroud)

rest web-services restful-architecture

11
推荐指数
1
解决办法
3457
查看次数

REST API真的是RESTful吗?

我是这个游戏的新手,所以我可能会误解事物.实际上,如果有人告诉我,我误解了事情,那将是一种恩惠.也许这个人会体贴到足以向我展示正确的道路.但...

REST适用于Web服务(http://en.wikipedia.org/wiki/Representational_state_transfer#Applied_to_web_services)的" 指南 "或" 最佳实践 "之一是,您应该在拨打电话时使用正确的HTTP方法(我误解了它?)REST API的.

但是看看Web上的许多API实现,我看到100%的调用实际上是GET调用,根据它们的URI,它将被API解释为HTTP动词或方法之一.

因此,例如,查看Twitter(https://dev.twitter.com/rest/public)的REST API文档,其原则上只定义了两个动词/方法(GET和POST),实际上已发送所有调用作为GET,并且基于GET调用中的URI,由API解释并采取行动.

例:

GET状态/查找:https://api.twitter.com/1.1/statuses/lookup.json

POST状态/更新(PUT?):https://api.twitter.com/1.1/statuses/update.json

在这两种情况下,调用本身都是使用GET进行的,URI的最后一部分将其定义为真正的GET或POST.

总之,要成为真正的REST,不应该为Web服务的REST API的客户端实现使用正确的HTTP谓词/方法吗?

我错过了什么?

api rest http-verbs http-method

3
推荐指数
1
解决办法
1769
查看次数