2016-11-14 108 views
0

我使用MongoDB的,猫鼬和表达的,我想用这样的“发现”的方法:它是确定使用POST在服务器上的GET请求

checklist.find({ _id: { $in: checklistIdsArray } }) 

基本上我想找到checklistIdsArray中列出的所有清单。现在,这工作正常,但我使用POST请求,而不是GET请求,因为我需要发送“checklistIdsArray”对象到服务器,我不能在GET请求中执行它,因为GET请求没有正文,技术上它可以有但不推荐。

function getTripChecklists(checklistsIds) { 
      var URL = SERVER_URL + '/checklists/tripchecklists'; 
      return $http.post(URL, checklistsIds) 
       .then(successHandler) 
       .catch(errorHandler); 
} 

这是最好的方法来完成我想要的,还是有更好的方法?

+0

的'/清单/ tripchecklists'端点不接受查询参数? –

+0

它可以,但checklistIdsArray可以用像这样的元素非常大:[“582a1174affead1b0c0fbb55”。 “582a1174affead1b0c0fbb55”。等等]我不能把这些作为params,太大。 – FraK

+0

在我的建议中,就性能而言,这是一个最好的方法。 – Sam

回答

1

好了,当你谈论“最好的”,你需要坚持公约和RESTful约定不建议使用POST获取数据,它应该总是GET。

我们已经忽略了查询参数,因为它是乏味和并不被看好。所以是的,可以使用POST,它不会是RESTful,但然后,而不是多个电话,只有一个电话就足够了,你在性能方面取胜。

如果你要坚持REST风格,你可能想看看不同的设计它,就像如果你事先所说的所有的清单和在UI上使用每所选择的清单的范围是什么?如果提供checklistIds的API可以提供附加到它的清单,那么您将不需要单独的调用。

Ofcourse你会想冗余和大的反应,但接下来我们就来定义,就是我们所说的“最好的”。

1

一个RESTful的方式做,这将是有一个创建通过张贴“查询结果资源”(在体内IDS)的端点,然后可以用GET获取之后。如果您的checklistIds是一个长长的ID列表,或者收集查询结果的处理过程可能需要一段时间,这种方式尤其有用。

另一种更简单的方法是通过checklistIds作为查询参数,有用的,如果你知道ID的数量会很小。

有一个在另一个关于这个更大的讨论,让回答:HTTP GET with request body

+0

我不能通过ID,因为它们很大,不知道它们的确切数量。你能否更详细地解释你的第一个关于使用POST的端点的想法?它不会像只有POST请求一样,而是在服务器内部添加GET请求吗? – FraK

+0

当然。我的意思是两个相关但不同的东西。首先,如果预期的有效载荷太大,使用POST并不罕见。在这种情况下,使用POST主体中的有效内容POST,获取您的旅程清单并返回POST响应。第二个想法是,如果您的查询实际上可能需要一段时间才能处理,那么您可以POST您的查询,而不是阻止将以其他方式返回'queryId',以便稍后以GET和查询结果返回。真的取决于您的资源使用情况。希望这有助于澄清。 –

+0

以后如何返回并使用queryID获取查询结果?我不知道你能做到这一点?! – FraK