如果有效载荷很大,请休息POST VS GET

时间:2015-05-20 06:00:49

标签: rest

我理解GET和POST的定义如下。

GET:列出集合的成员,并使用其成员URI进行进一步导航。例如,列出所有待售的汽车。

POST:在集合中创建一个新条目,集合自动分配ID。创建的ID通常包含在此操作返回的数据中。

我的API在服务器中使用JSON消息搜索具有巨大请求负载的一些细节,在这种情况下我应该使用哪个动词?

也有人可以告诉我可以在查询字符串中传递的字符的长度。

5 个答案:

答案 0 :(得分:9)

GET和POST请求之间的主要区别在于,在前者中,整个请求被编码为URL本身的一部分,而在后者中,参数在头之后发送。此外,在GET请求中,不同的浏览器会对URL的大小施加不同的限制。大多数现代浏览器至少允许200KB,但Internet Explorer似乎将URL大小限制为2KB。

话虽如此,如果您怀疑您将传递大量参数,这些参数可能超过接收Web服务器对GET请求施加的限制,则应切换到POST。

Here is a site调查了大多数现代浏览器的GET行为,值得一读。

答案 1 :(得分:4)

派对迟到了,但是对于任何寻找解决方案的人来说,这可能会有所帮助。

我想出了两种不同的策略来解决这个问题。我将创建概念证明API并测试哪一个更适合我。以下是我目前正在考虑的解决方案:

<强> 1。 X-HTTP-方法-替代:

基本上我们会使用POST / PUT方法隧道传输GET请求,并添加 X-HTTP-Method-Override 请求标头,以便服务器将请求路由到GET调用。操作简单,一次完成。

<强> 2。划分和规则:

将请求分为两个单独的请求。发送包含所有有效负载的POST / PUT请求,服务器将创建必要的响应并将其与密钥/ id一起存储在cache / db中以访问数据。然后服务器将使用&#34;位置&#34;标头或Key / id,通过它可以访问存储的响应。

现在发送GET请求,其中包含服务器在之前的POST请求中给出的密钥/位置。实现起来有点复杂,需要两个请求,还需要一个单独的策略来清理缓存的响应。

答案 2 :(得分:3)

如果这是您的API的典型情况,那么RESTful方法可以将查询数据POST到缓冲区端点,该端点返回一个URI,您可以从中获取结果。

谁知道这些缓存可能会减少发送“巨大” blob数据的需要。

答案 3 :(得分:0)

您可以使用两者通过将某些数据传递到服务器来从服务器获取结果

如果是一个或两个参数,例如Id

此处仅使用一个参数。但是可以使用3到4个参数这是我在 angularjs

中的使用方式
  

首选:获取

Example : $http.get('/getEmployeeDataById?id=22');

如果是大Json对象

  

首选:发布

Example : var dataObj = 
          {
                name : $scope.name,

                age : $scope.age,

                headoffice : $scope.headoffice

          };    

var res = $http.post('/getEmployeesList', dataObj);

And For Size Of Characters That Can Be Passed In Query String Here Is Already Answered

答案 4 :(得分:-4)

如果您从服务器获取数据,请使用GET。如果您想发布某些内容,请使用POST。有效载荷大小是无关紧要的。如果您想使用较小的有效负载,则可以实现分页。