Module: ApiTools::DefaultRestModule

Included in:
DefaultRest
Defined in:
lib/api_tools/default_rest_module.rb

Instance Method Summary collapse

Instance Method Details

#base_paramsObject



97
98
99
# File 'lib/api_tools/default_rest_module.rb', line 97

def base_params
  {} # 子类中复写
end

#basic_request(request_dict, user_options) ⇒ Object



59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
# File 'lib/api_tools/default_rest_module.rb', line 59

def basic_request(request_dict, user_options)
  exception = nil
  user_options[:retry_times].times do
    begin
      response = ::RestClient::Request.execute(request_dict)
      return ::Oj.load(response.body, symbol_keys: true) if user_options[:response_json]
      return response.body
    rescue RestClient::Exception => e
      exception = e
      next
    end
  end
  raise exception unless user_options[:ensure_no_exception]
  {
    status: false,
    message: ex.message,
    response_code: ex && ex.response.code,
    response_body: ex && ex.response.body
  }
end

#basic_urlObject



93
94
95
# File 'lib/api_tools/default_rest_module.rb', line 93

def basic_url
  'http://www.example.com' # 子类中复写
end

#build_similar_get_request(word, path, user_params, user_options) ⇒ Object



21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/api_tools/default_rest_module.rb', line 21

def build_similar_get_request(word, path, user_params, user_options)
  # 生成类get 请求的URL
  path_params = URI.escape(user_params.collect { |k, v| "#{k}=#{v}" }.join('&'))
  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) ⇒ Object



35
36
37
38
39
40
41
42
43
44
45
# File 'lib/api_tools/default_rest_module.rb', line 35

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) ⇒ Object



47
48
49
50
51
52
53
54
55
56
57
# File 'lib/api_tools/default_rest_module.rb', line 47

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_optionsObject



80
81
82
83
84
85
86
87
88
89
90
91
# File 'lib/api_tools/default_rest_module.rb', line 80

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