是否可以在服务器上使用POST进行GET请求

时间:2016-11-14 20:30:35

标签: mongodb rest post mongoose

我正在使用mongoDB,mongoose和express,我想使用" find"像这样的方法:

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);
}

这是实现我想要的最佳方法,还是有更好的方法?

2 个答案:

答案 0 :(得分:1)

这样做的一种RESTful方法是让端点通过POST(在主体中具有id)创建“查询结果资源”,然后可以使用GET获取。如果您的checklistIds是一长列ID或者收集查询结果的处理可能需要一段时间,这种方式特别有用。

另一种更简单的方法是将checklistIds作为查询参数传递,如果您知道id的数量很小,则非常有用。

在另一个SO回答中对此进行了更大的讨论:HTTP GET with request body

答案 1 :(得分:1)

好吧,当你谈到最好的'你需要坚持使用约定,而RESTful约定并不建议使用POST来获取数据,它应该总是GET。

我们已经忽略了查询参数,因为它很乏味且不受欢迎。所以是的,可以使用POST,它不会是RESTful,但不是多次通话,只有一次通话就足够了,你在性能方面取胜。

如果您想坚持使用RESTful,您可能希望以不同的方式看待它的设计范围,例如,如果您事先调用所有清单并按照UI上选择的清单使用该怎么办?如果提供checklistIds的API可以提供附加的清单,那么您就不需要单独调用。

当然,你会考虑冗余和大响应,但是我们必须定义,我们称之为最好的'。

相关问题