了解HTTParty配置

时间:2016-04-26 15:00:13

标签: ruby

在“以艰难的方式学习Ruby”中,作者建议通过某些代码并尝试理解它。他们还建议这很难,但要写下你对代码的疑问。唯一的问题是,我不知道如何在谷歌搜索后得到我的问题的答案,所以我想我会尝试在这里发布它们,看看是否有人可以帮助我?让我知道如果这不合适,我会尝试寻找其他选择。

require 'httparty'

class BaseWebService
  include HTTParty
  format :json
  base_uri URL_to_mock_services
  default_options.update(verify: false)

  def self.get_data(extension = {}, url = {}, body = {}, query = {})
    url_string = combine_extension_and_url(extension, url)
    do_get = -> (req_url, req_body, req_query) { get(req_url, body: req_body.class == String ? JSON.parse(req_body) : req_body, query: req_query) }
    return_response(url_string, body.to_json, query, &do_get)
  end

在上面的代码中,作者正在设置“模拟服务”请求。作者正在使用HTTParty向服务发出请求。我对以下内容有一些疑问:

  • 为什么我们在.rb文件中需要HTTParty呢? 必须把它包括在课堂内?它默认不可用 在整个班级?

    • format :json:这是否会格式化我们从调用中作为JSON对象返回的任何响应?
    • base_uri:每次创建BaseWebService类的新实例时都会自动调用它吗?如果不是,它是如何触发的?
    • default_options:我在HTTParty文档中看到了

        

      返回属性default_options的值

      但我不确定这意味着什么。也不是它在这个课程中的用途?

    • 语法do_get = ->有什么作用?
    • 在类方法get_data中,作者使用req_urlreq_bodyreq_query,但我无法在代码库中的任何位置找到它们作为变量或方法。你知道这些是怎么用的吗?

1 个答案:

答案 0 :(得分:4)

你是我最喜欢的高尔夫球手,所以我会在这里帮助你...

  

为什么如果我们在.rb文件中需要HTTParty,那么我们必须将它包含在类中?它是否在整个班级默认不可用?

require关键字是Ruby查找具有该名称的文件并加载它的方式。

一旦需要,您现在可以从该文件/文件访问类和模块,例如,HTTParty。

include在这里做了一些非常不同的事情。您可以看到in HTTParty它实际上是一个模块,当您include 'AModule'上某个类(代码中为BaseWebService)时,您会给您的类实例提供对该模块的访问权限&# 39;方法。这意味着HTTParty模块实现的方法(例如get)现在可以通过BaseWebServiceBaseWebService.new.get课程中使用。

  

格式:json,这是否会格式化我们从调用中作为JSON对象返回的任何响应?

他只是覆盖了类方法format(请参阅HTTParty line #50)。

  

base_uri - 每次创建BaseWebService类的新实例时会自动调用吗?如果没有,它是如何触发的?   default_options - 我在HTTParty文档中看到这个状态返回属性default_options的值,但我不确定这意味着什么。也不是它在这个课程中的用途?

当您调用大多数HTTParty方法时,它会查看是否设置了base_uri,并且由于您在课程中重写了它,它将使用该值。

  

语法是什么do_get = - >办?

do_get = ->是一项任务,其中新变量do_get被分配了lambda->是lambda的简写。

  

在类方法get_data中,作者使用了以下命令(req_url,req_body,req_query),但我无法在代码库中的任何位置找到它们作为变量或方法?你知道这些是怎么用的吗?

当块为yielded时,这些变量被赋值。