module Creditario::API::Request
Creditario::API::Request
¶ ↑
Modulo encargado de ejecutar los requests HTTP de cualquier tipo a la API
de creditar.io
Public Class Methods
request(method, path, params = {})
click to toggle source
Ejecuta un request HTTP a la API
de creditar.io
Los sÃmbolos aceptados en el parámetro method
son:
-
:get
-
:post
-
:delete
-
:patch
-
:multipart
# File lib/creditario/api/request.rb, line 31 def request(method, path, params = {}) uri = URI(Creditario::Client.api_base + path) request = request_from_method(method, uri, params) response = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == "https") do |http| http.request(request) end handle_errored_responses(response) return response if response.code == "204" && response.body.nil? response_body = handle_responses(response) Oj.load(response_body) rescue Oj::ParseError => ex raise Exceptions::InvalidResponseBodyError, ex.message rescue Net::OpenTimeout => ex raise Exceptions::APIBusyError, ex.message rescue Errno::ECONNREFUSED => ex raise Exceptions::APINotReachableError, ex.message end
Private Class Methods
handle_errored_responses(response)
click to toggle source
# File lib/creditario/api/request.rb, line 114 def handle_errored_responses(response) return if response.code.to_i < 400 raise Exceptions::InvalidAPIKeyError if response.code == "401" raise Exceptions::ForbiddenError.new(response) if response.code == "403" raise Exceptions::ResourceNotFoundError.new(response) if response.code == "404" raise Exceptions::UnprocessableEntityError.new(response) if response.code == "422" end
handle_responses(response)
click to toggle source
# File lib/creditario/api/request.rb, line 123 def handle_responses(response) return @@cached_request[:payload] if response.code == "304" && @@cached_request if defined?(Rails) && response.code == "200" && response["Last-Modified"] cache_response = { etag: response["Etag"], last_modified: response["Last-Modified"], payload: response.body } Rails.cache.write(response.uri.to_s, cache_response, expires_in: 10.minutes) end response.body end
request_from_method(method, uri, params)
click to toggle source
# File lib/creditario/api/request.rb, line 55 def request_from_method(method, uri, params) case method when :get cache_enabled = params.delete(:cache) uri.query = URI.encode_www_form(params) request = set_request_headers(Net::HTTP::Get.new(uri)) request = set_request_cache_headers(request) if defined?(Rails) && cache_enabled request when :post set_request_body(set_request_headers(Net::HTTP::Post.new(uri)), params) when :multipart set_authorization_headers(Net::HTTP::Post::Multipart.new(uri, params)) when :delete set_request_headers(Net::HTTP::Delete.new(uri)) when :patch set_request_body(set_request_headers(Net::HTTP::Patch.new(uri)), params) end end
set_request_body(request, params)
click to toggle source
# File lib/creditario/api/request.rb, line 109 def set_request_body(request, params) request.body = params.to_json request end
set_request_cache_headers(request)
click to toggle source
# File lib/creditario/api/request.rb, line 85 def set_request_cache_headers(request) @@cached_request = Rails.cache.fetch(request.uri.to_s) if @@cached_request request["If-None-Match"] = @@cached_request[:etag] request["If-Modified-Since"] = @@cached_request[:last_modified] end request end
set_request_headers(request)
click to toggle source
# File lib/creditario/api/request.rb, line 75 def set_request_headers(request) request = set_authorization_headers(request) request["User-Agent"] = "creditario-client gem v#{Creditario::Client::VERSION}" request["Accept"] = "application/vnd.creditar.v#{Creditario::Client.api_version}+json" request["Content-Type"] = "application/json" request end
set_sandbox_header(request)
click to toggle source
# File lib/creditario/api/request.rb, line 104 def set_sandbox_header(request) request["Application-Context"] = !Creditario::Client.sandbox || "sandbox" request end