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