我们的一些REST服务需要指示客户端需要采取进一步的操作来完成请求(通常可以在另一个URI下找到对请求的响应)。
通常,这是通过HTTP 3xx响应实现的。但是,在基于JavaScript的客户端的情况下,重定向由浏览器本身执行,然后响应才能到达JavaScript代码。
基本上我需要的是一种RESTful方式来通知客户端(JavaScript代码)可以在另一个URI下找到响应并让客户端自己处理这样的响应。
我正在考虑两种解决方案:
HTTP 200 OK,包含要遵循的URI的实体。我不喜欢创建一个只携带URI的整个实体。我宁愿通过HTTP标头实现这一点
HTTP 204 No Location响应,其中Location头包含给定的URI。但在这里我不确定它是否“符合REST”。是否可以将HTTP 204 No Content与主要用于重定向的Location头(以及HTTP 3xx响应)或创建新资源相结合?
或者有更好的解决方案吗?
答案 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,
…
}