Mongodb 在服务器上对GET请求使用POST可以吗

Mongodb 在服务器上对GET请求使用POST可以吗,mongodb,rest,post,mongoose,Mongodb,Rest,Post,Mongoose,我使用的是mongoDB、mongoose和express,我想使用如下“查找”方法: checklist.find( { _id: { $in: checklistIdsArray } } ) 基本上,我想找到checklistIdsArray中列出的所有检查表。现在这很好,但我使用了POST请求而不是GET请求,因为我需要将“checklistIdsArray”对象发送到服务器,而我无法在GET请求中执行此操作,因为GET请求没有主体,技术上可以有主体,但不推荐使用 function ge

我使用的是mongoDB、mongoose和express,我想使用如下“查找”方法:

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

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

一种RESTful方法是使用一个端点,该端点通过POST(正文中有ID)创建一个“查询结果资源”,然后使用GET进行获取。如果checklistIds是一个很长的id列表,或者收集查询结果的过程可能需要一段时间,那么这种方法尤其有用

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


关于这一点,在另一个SO答案中有一个更大的讨论:

一个RESTful方法是使用一个端点,该端点通过POST(正文中有ID)创建一个“查询结果资源”,然后您可以使用GET进行获取。如果checklistIds是一个很长的id列表,或者收集查询结果的过程可能需要一段时间,那么这种方法尤其有用

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


关于这一点,在另一个SO答案中有一个更大的讨论:

好吧,当您谈论“最佳”时,您需要遵守约定,RESTful约定不建议使用POST来获取数据,它应该是GET ALVERS

我们已经忽略了查询参数,因为它很乏味而且不受欢迎。所以可以使用yes POST,它不是RESTful,但是如果不是多个调用,那么只有一个调用就足够了,并且您在性能方面赢得了胜利

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


当然,你们会想到冗余和大量响应,但我们必须定义,我们称之为“最佳”

好吧,当您谈论“最佳”时,您需要遵守约定,RESTful约定不建议使用POST获取数据,它应该是GET always

我们已经忽略了查询参数,因为它很乏味而且不受欢迎。所以可以使用yes POST,它不是RESTful,但是如果不是多个调用,那么只有一个调用就足够了,并且您在性能方面赢得了胜利

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


当然,你们会想到冗余和大量响应,但我们必须定义,我们称之为“最佳”

/checklists/tripchecklists
端点不接受查询参数?可以接受,但checklistIdsArray可以非常大,包含以下元素:[“582A1174Affed1B0C0FBB55.”“582A1174Affed1B0C0FBB55”等]我不能将这些参数放在参数中,太大了。在我的建议中,就性能而言,这是最好的方法。
/checklists/tripchecklists
端点不接受查询参数?可以,但checklistIDSRarray可以非常大,包含以下元素:[“582A1174Affed1B0C0FBB55.”“582A1174Affed1B0C0FBB55”。等等]我不能将它们作为参数,太大。在我的建议中,就性能而言,这是一个最好的方法。我无法传递ID,因为它们很大,并且不知道确切的数量。你能更详细地解释一下你的第一个想法吗?这不就是仅仅拥有POST请求,同时在服务器中添加GET请求吗?当然。我指的是两件相关但不同的事情。首先,如果您的预期负载太大,那么使用POST并不少见。在这种情况下,使用POST主体中的有效负载POST,获取您的行程检查表并在POST响应中返回。第二个想法是,如果您的查询实际上可能需要一段时间来处理,您可以发布查询,而不是阻塞查询,它将以其他方式返回“queryId”,以便稍后返回GET和fetch查询结果。这取决于你的资源使用情况。希望这有助于澄清。如何可能稍后返回并使用queryID获取查询结果?我不知道你能做到?!我无法传递ID,因为它们很大,并且不知道它们的确切数量。你能更详细地解释一下你的第一个想法吗?这不就是仅仅拥有POST请求,同时在服务器中添加GET请求吗?当然。我指的是两件相关但不同的事情。首先,如果您的预期负载太大,那么使用POST并不少见。在这种情况下,使用POST主体中的有效负载POST,获取您的行程检查表并在POST响应中返回。第二个想法是,如果您的查询实际上可能需要一段时间来处理,您可以发布查询,而不是阻塞查询,它将以其他方式返回“queryId”,以便稍后返回GET和fetch查询结果。这取决于你的资源使用情况。希望这有助于澄清。如何可能稍后返回并使用queryID获取查询结果?我不知道你能做到?!