|
|
|
@@ -0,0 +1,94 @@ |
|
|
|
class Getway::ClientService < ApplicationService |
|
|
|
attr_reader :url, :params |
|
|
|
|
|
|
|
PAGINATE_DEFAULT_PAGE = 1 |
|
|
|
PAGINATE_DEFAULT_LIMIT = 20 |
|
|
|
|
|
|
|
def initialize(options={}) |
|
|
|
@url = options[:url] |
|
|
|
@params = options[:params] |
|
|
|
end |
|
|
|
|
|
|
|
def get(url, params={}) |
|
|
|
conn(params).get do |req| |
|
|
|
req.url full_url(url, 'get') |
|
|
|
params.except(:token).each_pair do |key, value| |
|
|
|
req.params["#{key}"] = value |
|
|
|
end |
|
|
|
end |
|
|
|
|
|
|
|
# response.headers.each do |k,v| |
|
|
|
# puts "#{k}:#{v}" |
|
|
|
# end #=> 响应头 |
|
|
|
end |
|
|
|
|
|
|
|
private |
|
|
|
def conn(auth={}) |
|
|
|
@client ||= begin |
|
|
|
Faraday.new(url: domain) do |req| |
|
|
|
req.request :url_encoded |
|
|
|
req.headers['Content-Type'] = 'application/json' |
|
|
|
req.response :logger # 显示日志 |
|
|
|
req.adapter Faraday.default_adapter |
|
|
|
end |
|
|
|
end |
|
|
|
@client |
|
|
|
end |
|
|
|
|
|
|
|
def base_url |
|
|
|
Getway.getway_config[:base_url] |
|
|
|
end |
|
|
|
|
|
|
|
def domain |
|
|
|
Getway.getway_config[:domain] |
|
|
|
end |
|
|
|
|
|
|
|
def api_url |
|
|
|
[domain, base_url].join('') |
|
|
|
end |
|
|
|
|
|
|
|
def full_url(api_rest, action='post') |
|
|
|
url = [api_url, api_rest].join('').freeze |
|
|
|
url = action === 'get' ? url : URI.escape(url) |
|
|
|
url = URI.escape(url) unless url.ascii_only? |
|
|
|
puts "[getway] request url: #{url}" |
|
|
|
return url |
|
|
|
end |
|
|
|
|
|
|
|
def render_response(response) |
|
|
|
status = response.status |
|
|
|
body = response&.body |
|
|
|
|
|
|
|
# log_error(status, body) |
|
|
|
|
|
|
|
body, message = get_body_by_status(status, body) |
|
|
|
|
|
|
|
[status, message, body] |
|
|
|
end |
|
|
|
|
|
|
|
def get_body_by_status(status, body) |
|
|
|
body, message = |
|
|
|
case status |
|
|
|
when 401 then [nil, "401"] |
|
|
|
when 404 then [nil, "404"] |
|
|
|
when 403 then [nil, "403"] |
|
|
|
when 500 then [nil, "500"] |
|
|
|
else |
|
|
|
if body.present? |
|
|
|
body = JSON.parse(body) |
|
|
|
fix_body(body) |
|
|
|
else |
|
|
|
nil |
|
|
|
end |
|
|
|
end |
|
|
|
|
|
|
|
[body, message] |
|
|
|
end |
|
|
|
|
|
|
|
def fix_body(body) |
|
|
|
return [body, nil] if body.is_a?(Array) || body.is_a?(Hash) |
|
|
|
|
|
|
|
body['message'].blank? ? [body, nil] : [nil, body['message']] |
|
|
|
end |
|
|
|
|
|
|
|
end |