【问题标题】:Ruby example of Net::HTTP for GET, POST, PUT, DELETE用于 GET、POST、PUT、DELETE 的 Net::HTTP 的 Ruby 示例
【发布时间】:2014-12-06 00:15:57
【问题描述】:

我是第一次尝试学习 Ruby。我在 PHP 和 PHP 方面有一些经验,我做了一个类似的函数

function call_api(endpoint,method,arr_parameters='')
{
 // do a CURL call
}

我会使用喜欢的

call_api('https://api.com/user','get','param=1&param=2');
call_api('https://api.com/user/1','get');
call_api('https://api.com/user/1','post','param=1&param=2');
call_api('https://api.com/user/1','put','param=1&param=2');
call_api('https://api.com/user/1','delete');

到目前为止,我只学会了如何使用 Ruby 进行 GET 和 POST 调用,如下所示:

  conn = Net::HTTP.new(API_URL, API_PORT)
  resppost = conn.post("/user", 'param=1', {})
  respget = conn.get("/user?param=1",{})

但我不知道如何删除和放置。有人可以使用 Net::HTTP 对象显示删除和放置调用的示例代码吗?

【问题讨论】:

  • 有许多非常好的 Ruby 的 HTTP gem,特别是 Curb,它是经过良好测试的 libCurl 包装器。 ruby-toolbox.com/categories/http_clients 有一个很好的列表,与其尝试自己创建,不如利用其他人所做的工作。
  • Net::HTTP 的设计非常糟糕,在我看来违反了很多 Ruby 约定。我支持@theTinMan,如果可以的话,建议使用不同的 http 客户端库
  • 嘿,约翰,我的回答有帮助吗?

标签: ruby net-http


【解决方案1】:

我喜欢法拉第宝石。我觉得它的设计最简单。

一旦您gem install faraday,您就可以require 'faraday' 并执行以下操作:

result = Faraday.get('http://google.es')

您还可以 POST、PUT、DELETE 等。

Faraday.delete('http://google.es')
Faraday.post('http://google.es', {some_parameter: 'hello'})

项目:https://github.com/lostisland/faraday

【讨论】:

    【解决方案2】:

    我可以建议看看httparty 吗?他们在他们的页面上提供了一些非常棒的示例,可以完全按照您的意愿去做。

    response = HTTParty.get('https://api.stackexchange.com/2.2/questions?site=stackoverflow')
    
    puts response.body, response.code, response.message, response.headers.inspect
    

    还有更多调用不同端点的示例。

    【讨论】:

      【解决方案3】:

      对于 DELETE,您可以使用 conn.delete("/user/1", {})

      request = Net::HTTP::Delete.new("/user/1")
      response = conn.request(request)
      

      对于 PUT,

      response = http.set_request('PUT', "/user/1", "param=1") 
      

      Net::HTTP::Put.new(path)

      【讨论】:

        【解决方案4】:

        您只需为其命名:

        Net::HTTP::Put.new(uri)
        

        与删除相同:

        Net::HTTP::Delete.new(uri)
        

        你甚至可以用你现有的电话做到这一点:

        conn = Net::HTTP.new(uri)
        con.get(path)
        

        相当于:

        Net::HTTP::Get.new(uri)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-01-17
          • 1970-01-01
          • 2013-09-27
          • 1970-01-01
          • 2013-08-26
          • 2013-06-26
          • 2015-01-25
          • 1970-01-01
          相关资源
          最近更新 更多