基于JavaScript的客户端的3xx响应的RESTful替代方案
我们的REST服务需要指出客户端需要采取进一步的操作来完成请求(通常,对请求的响应可以在另一个URI下找到) 通常,这是通过HTTP 3xx响应实现的。但是,对于基于JavaScript的客户端,重定向是在响应到达JavaScript代码之前由浏览器本身执行的 基本上,我需要一种RESTful方式来通知客户端(JavaScript代码),响应可以在另一个URI下找到,并让客户端自己处理这样的响应 我正在考虑两种解决方案:基于JavaScript的客户端的3xx响应的RESTful替代方案,javascript,rest,http,Javascript,Rest,Http,我们的REST服务需要指出客户端需要采取进一步的操作来完成请求(通常,对请求的响应可以在另一个URI下找到) 通常,这是通过HTTP 3xx响应实现的。但是,对于基于JavaScript的客户端,重定向是在响应到达JavaScript代码之前由浏览器本身执行的 基本上,我需要一种RESTful方式来通知客户端(JavaScript代码),响应可以在另一个URI下找到,并让客户端自己处理这样的响应 我正在考虑两种解决方案: HTTP 200对包含URI的实体没有问题。我不喜欢创建一个只包含URI的
或者有更好的解决方案吗?假设您有一个json响应格式,您可以接受一个请求参数,如
noredirect
,该参数在出现时将http响应代码设置为200,并在返回的对象中设置真实的响应代码
GET /some/resource
200 OK
{
status: 200,
…
}
GET /some/unknown/resource
404 Not Found
{
status: 404,
…
}
GET /some/unknown/resource?noredirect
200 OK
{
status: 404,
…
}
如果我理解正确,你有一个过程,比如说5个步骤。在第5步之后,准备好了一些结果,您希望将这些结果指向您的客户机,而不是通过HTTP-3xx,而是以更简洁的方式 我建议您在
JSON
-响应中使用link
属性:
{
...
"links": [
...
"result": { "href": "/calculation/1234" }
...
]
}
你的客户可以把这个答案转换成一个简单的链接/按钮
这与
HATEOAS
(作为应用程序状态引擎的超媒体)一致,表明当前状态在引用的不同位置下提供结果 请你详细说明一下,也许可以举一个简单的例子。那会有帮助的。一般来说,如果您有一个“结果”,为什么不将其包含在客户已采取的行动的答案中?如果您的过程还没有完成,您的响应应该包括一个链接:
属性,其中定义了更多的URL。基本上您是对的。请求启动某种处理,作为响应,我需要通知客户机有关URI以检索结果。所以你建议返回HTTP 200 OK和响应体中的链接,对吗?是的。那是我的建议。这是一种透明的方式来引导整个过程。在每一步之后,您可以包括指向上一步以及下一步的链接。每个答案都提供了应用程序的当前状态。这很有意义,我喜欢links集合。实际上,它和我们现在拥有的非常接近,然而,我们返回了一个稍微不同的实体。关键是我希望避免返回任何正文并模拟HTTP 3xx响应。但这可能是唯一有意义的方法。实现这一点的唯一方法是:您可以在客户端中设置location.href
。但这不是很安静;)