RestClient::Request.execute 和 RestClient.post 有什么区别?

What is the difference between RestClient::Request.execute and RestClient.post?

我用 RestClient::Request.execute 发出了一个 post 请求,它有效,但有时它以 422(无法处理的实体)结束。

后来我尝试了 RestClient.post,它没有给我 422 并且一直工作得很好。

这两个调用有什么区别?

我知道 RestClient::RequestRestClient.post 有更多使用参数的可能性。我不明白为什么我用一种方法得到 422 而另一种方法却没有。

这里我用了json:

response = RestClient::Request.execute(
        :method => :post,
        :url =>  'http://localhost:3000',
        :timeout => 30,
        :open_timeout => 2,
        :payload => payload.to_json,
        :headers => {
            :content_type => :json,
            :accept => :json
        }
    )

对比

response = RestClient.post('http://localhost:3000',
          :param1 => 'abc',
          :param2 => "def")

它们相同 - RestClient.postexecute 的语法糖,请参阅 restclient 的来源,restclient.rb:

def self.post(url, payload, headers={}, &block)
    Request.execute(:method => :post,
       :url => url,
       :payload => payload,
       :headers => headers, &block)
end

422 是由其他原因引起的