Class: AppStoreServerApi::Utils::HttpClient

Inherits:
Object
  • Object
show all
Defined in:
lib/app_store_server_api/utils/http_client.rb

Constant Summary collapse

DEFAULT_OPEN_TIMEOUT =
10
DEFAULT_READ_TIMEOUT =
30
RETRY_ERRORS =
[Faraday::TimeoutError, Faraday::ConnectionFailed, Faraday::ServerError]

Instance Method Summary collapse

Constructor Details

#initialize(open_timeout: DEFAULT_OPEN_TIMEOUT, read_timeout: DEFAULT_READ_TIMEOUT) ⇒ HttpClient

initialize client

Parameters:

  • open_timeout (Integer) (defaults to: DEFAULT_OPEN_TIMEOUT)

    open timeout

  • read_timeout (Integer) (defaults to: DEFAULT_READ_TIMEOUT)

    read timeout



17
18
19
20
# File 'lib/app_store_server_api/utils/http_client.rb', line 17

def initialize(open_timeout: DEFAULT_OPEN_TIMEOUT, read_timeout: DEFAULT_READ_TIMEOUT)
  @open_timeout = open_timeout
  @read_timeout = read_timeout
end

Instance Method Details

#build_connectionObject



22
23
24
25
26
27
28
29
# File 'lib/app_store_server_api/utils/http_client.rb', line 22

def build_connection
  Faraday.new do |f|
    f.adapter :net_http do |http|
      http.open_timeout = @open_timeout
      http.read_timeout = @read_timeout
    end
  end
end

#connectionObject



31
32
33
# File 'lib/app_store_server_api/utils/http_client.rb', line 31

def connection
  @connection ||= build_connection
end

#request(url:, method: :get, params: {}, headers: {}) ⇒ Faraday::Response

send request

Parameters:

  • url (String)

    request url

  • method (Symbol) (defaults to: :get)

    request method(:get, :post, :put, :patch, :delete)

  • params (Hash, String, nil) (defaults to: {})

    request params

  • headers (Hash) (defaults to: {})

    request headers

Returns:

  • (Faraday::Response)


41
42
43
44
45
46
47
48
49
50
51
52
53
54
# File 'lib/app_store_server_api/utils/http_client.rb', line 41

def request(url:, method: :get, params: {}, headers: {})
  method = method.to_sym

  case method
  when :get, :delete
    connection.run_request(method, url, nil, headers) do |req|
      req.params.update(params) if params.is_a?(Hash)
    end
  when :post, :put, :patch
    connection.run_request(method, url, params, headers)
  else
    raise ArgumentError, "Unsupported HTTP method: #{method}"
  end
end

#request_with_retry(url:, method: :get, params: {}, headers: {}, retries: 3, base_interval: 0.5, multiplier: 1.0, max_interval: 30) ⇒ Faraday::Response

send request with retry

Parameters:

  • url (String)

    request url

  • method (Symbol) (defaults to: :get)

    request method

  • params (Hash, String, nil) (defaults to: {})

    request params

  • headers (Hash) (defaults to: {})

    request headers

  • retries (Integer) (defaults to: 3)

    retry count

  • base_interval (Float) (defaults to: 0.5)

    base interval

  • multiplier (Float) (defaults to: 1.0)

    multiplier

  • max_interval (Float) (defaults to: 30)

    max interval

Returns:

  • (Faraday::Response)


66
67
68
69
70
71
72
73
74
75
76
# File 'lib/app_store_server_api/utils/http_client.rb', line 66

def request_with_retry(url:, method: :get, params: {}, headers: {}, retries: 3,
  base_interval: 0.5, multiplier: 1.0, max_interval: 30)

  Retriable.retriable tries: retries,
    base_interval: base_interval,
    max_interval: max_interval,
    multiplier: multiplier,
    on: RETRY_ERRORS do
    request(url: url, method: method, params: params, headers: headers)
  end
end