module ApiTools::DefaultRestModule

Public Instance Methods

base_params() click to toggle source
# File lib/api_tools/default_rest_module.rb, line 103
def base_params
  {} # 子类中复写
end
basic_request(request_dict, user_options) click to toggle source
# File lib/api_tools/default_rest_module.rb, line 62
def basic_request(request_dict, user_options)
  exception = nil
  user_options[:retry_times].times do
    begin
      response = ::RestClient::Request.execute(request_dict)
      return MultiJson.load(response.body, symbolize_keys: true) if user_options[:response_json]

      return response.body
    rescue RestClient::Exception => e
      exception = e
      next
    end
  end
  puts "Restclient error, body = #{exception.response.body}" if exception.respond_to? :response
  raise exception unless user_options[:ensure_no_exception]

  {
    status: false,
    message: exception.message,
    response_code: exception&.response&.code,
    response_body: exception&.response&.body
  }
end
basic_url() click to toggle source
# File lib/api_tools/default_rest_module.rb, line 99
def basic_url
  'http://www.example.com' # 子类中复写
end
build_similar_get_request(word, path, user_params, user_options) click to toggle source
# File lib/api_tools/default_rest_module.rb, line 23
def build_similar_get_request(word, path, user_params, user_options)
  # 生成类get 请求的URL
  path_params = URI.encode_www_form(user_params)
  tmp = path.include?('?') ? '&' : '?'
  path = path + tmp + path_params
  url = build_whole_url(path)
  {
    method: word,
    url: url,
    headers: user_options[:header],
    timeout: user_options[:timeout]
  }.merge(user_options[:other_base_execute_option])
end
build_similar_post_request(word, path, user_params, user_options) click to toggle source
# File lib/api_tools/default_rest_module.rb, line 37
def build_similar_post_request(word, path, user_params, user_options)
  url = build_whole_url(path)
  payload = user_options[:params_to_json] ? user_params.to_json : user_params
  {
    method: word,
    url: url,
    payload: payload,
    headers: user_options[:header],
    timeout: user_options[:timeout]
  }.merge(user_options[:other_base_execute_option])
end
build_whole_url(path) click to toggle source
# File lib/api_tools/default_rest_module.rb, line 49
def build_whole_url(path)
  web = basic_url
  return web if path.length.zero?
  return path if path.start_with?('http') # path 是一个绝对路径

  if web[-1] == '/'
    path = path[1..-1] if path[0] == '/'
  else
    path = "/#{path}" if path[0] != '/'
  end
  web + path
end
default_options() click to toggle source
# File lib/api_tools/default_rest_module.rb, line 86
def default_options
  @default_options ||= {
    timeout: 5,
    retry_times: 5,
    response_json: true,
    params_to_json: true,
    ensure_no_exception: false,
    header: { content_type: :json, accept: :json },
    other_base_execute_option: {},
    exception_with_response: true
  }
end