代码之家  ›  专栏  ›  技术社区  ›  pgiecek

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

  •  0
  • pgiecek  · 技术社区  · 12 年前

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

    通常,这是通过HTTP 3xx响应实现的。然而,对于基于JavaScript的客户端,在响应到达JavaScript代码之前,重定向由浏览器自己执行。

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

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

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

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

    还是有更好的解决方案?

    2 回复  |  直到 12 年前
        1
  •  2
  •   Thomas Junk    12 年前

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

    我建议你利用 link 您的 JSON -响应:

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

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

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

        2
  •  0
  •   Jaime Gómez    12 年前

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