RESTful替代基于JavaScript的客户端的3xx响应

时间:2014-07-25 09:22:54

标签: javascript rest http

我们的一些REST服务需要指示客户端需要采取进一步的操作来完成请求(通常可以在另一个URI下找到对请求的响应)。

通常,这是通过HTTP 3xx响应实现的。但是,在基于JavaScript的客户端的情况下,重定向由浏览器本身执行,然后响应才能到达JavaScript代码。

基本上我需要的是一种RESTful方式来通知客户端(JavaScript代码)可以在另一个URI下找到响应并让客户端自己处理这样的响应。

我正在考虑两种解决方案:

  1. HTTP 200 OK,包含要遵循的URI的实体。我不喜欢创建一个只携带URI的整个实体。我宁愿通过HTTP标头实现这一点

  2. HTTP 204 No Location响应,其中Location头包含给定的URI。但在这里我不确定它是否“符合REST”。是否可以将HTTP 204 No Content与主要用于重定向的Location头(以及HTTP 3xx响应)或创建新资源相结合?

  3. 或者有更好的解决方案吗?

2 个答案:

答案 0 :(得分:2)

如果我理解正确,你就有一个过程,比如5个步骤。在第5步之后,准备了一些结果,您希望指向您的客户端,而不是通过HTTP-3xx,但是要更清洁。

我建议您使用link中的JSON属性 - 回复:

{
  ...
  "links": [
      ...
      "result": { "href": "/calculation/1234" }
      ...
  ]
}

您的客户可以接受此答案并将其转换为简单的链接/按钮。

这符合HATEOAS(超媒体作为应用程序状态引擎),表明当前状态在引用的不同位置提供结果。

答案 1 :(得分:0)

假设您有一个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,
    …
}