我可以从POST请求返回不同的资源吗?

时间:2013-12-22 23:42:07

标签: java spring rest java-ee

我正在编写一个RESTful Web服务API。我将Answer资源发布到机械问题上。当我这样做时,我想知道我的回答是否正确。为此,我有一个Result资源。

在HTTP请求中返回与您发布的资源不同的资源是错误的吗?

实施例: POST /mechanical-questions/4/answers - 回复结果。

答案将保存在服务器上,但结果也是如此。我应该将HttpStatus 20x代码与Location标头一起返回,以指示我可以在哪里找到测验结果或答案,以及响应实体应该是什么?创建的答案或测验结果?

2 个答案:

答案 0 :(得分:2)

显然,对此没有一个'正确'的答案。我认为你说你不应该将RESULT对象返回给接收ANSWER对象的端点是正确的。对我来说,我认为返回Location:标题有点奇怪。在创建之后,应该由消费客户端决定他们想要对ANSWER对象做什么。我有时看到的是POST响应对象中的location属性。

所以你有这样的请求

{
  'answer' : 'I hope I am correct'
}

这样的反应

{
   'id' : 12345
   'answer' : 'I hope I am correct'
   'result_id' : 68472
   'result_location' : '/mechanical-questions/4/result/68472'
}

这允许客户端在用户做出回答后确定流程 - 也许他们会立即对结果进行GET并显示它,或者在回答一系列问题后捆绑多次获取响应。< / p>

答案 1 :(得分:0)

我认为你肯定会返回一个OK代码,因为它是一个完全有效的情况。它也不是服务器错误或错误请求或类似的东西。

对于响应实体,这实际上取决于您的业务逻辑,至少从我的角度来看。开发人员之间有点争议。如果您希望您的客户在任何一种情况下都能得到正确的答案,那么只需将答案本身。如果客户端在获得答案之前应该尝试几次,那么可能会将URL放到响应实体中。你甚至可以做到这两点......