Class: Uploadcare::Api::Rest

Inherits:
Object
  • Object
show all
Includes:
Internal::ErrorHandler, Internal::ThrottleHandler
Defined in:
lib/uploadcare/api/rest.rb

Overview

Base client for the Uploadcare REST API.

Provides authenticated HTTP methods (GET, POST, PUT, PATCH, DELETE) for all REST API endpoints. Includes automatic error handling and throttle retry logic.

Endpoint classes are accessed via lazy-loaded accessors: rest = Uploadcare::Api::Rest.new(config: config) rest.files.list rest.groups.info(uuid: "...")

Constant Summary collapse

HTTP_GET =

Verb name used when deciding whether params belong in the query string.

'GET'

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(config: Uploadcare.configuration) ⇒ Rest

Initialize a new REST API client.

Parameters:

  • config (Uploadcare::Configuration) (defaults to: Uploadcare.configuration) —

    Configuration object (defaults to global config)



36
37
38
39
40
41
42
43
44
45
# File 'lib/uploadcare/api/rest.rb', line 36

def initialize(config: Uploadcare.configuration)
  @config = config
  @memo_mutex = Mutex.new
  @connection = Faraday.new(url: config.rest_api_root) do |conn|
    conn.request :json
    conn.response :json, content_type: /\bjson$/
    conn.response :raise_error
  end
  @authenticator = Uploadcare::Internal::Authenticator.new(config: config)
end

Instance Attribute Details

#authenticator ⇒ Uploadcare::Internal::Authenticator (readonly)



31
32
33
# File 'lib/uploadcare/api/rest.rb', line 31

def authenticator
  @authenticator
end

#config ⇒ Uploadcare::Configuration (readonly)



25
26
27
# File 'lib/uploadcare/api/rest.rb', line 25

def config
  @config
end

#connection ⇒ Faraday::Connection (readonly)

Returns:

  • (Faraday::Connection)


28
29
30
# File 'lib/uploadcare/api/rest.rb', line 28

def connection
  @connection
end

Instance Method Details

#addons ⇒ Uploadcare::Api::Rest::Addons

Returns Add-on operations endpoint.

Returns:



80
81
82
# File 'lib/uploadcare/api/rest.rb', line 80

def addons
  memoized(:@addons) { Uploadcare::Api::Rest::Addons.new(rest: self) }
end

#delete(path:, params: {}, headers: {}, request_options: {}) ⇒ Uploadcare::Result

Make a DELETE request wrapped in a Result.

Parameters:

  • path (String) —

    API endpoint path

  • params (Hash) (defaults to: {}) —

    Request body parameters

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

    Additional request headers

  • request_options (Hash) (defaults to: {}) —

    Request options

Returns:



171
172
173
# File 'lib/uploadcare/api/rest.rb', line 171

def delete(path:, params: {}, headers: {}, request_options: {})
  request(method: :delete, path: path, params: params, headers: headers, request_options: request_options)
end

#document_conversions ⇒ Uploadcare::Api::Rest::DocumentConversions

Returns Document conversion endpoint.

Returns:



85
86
87
# File 'lib/uploadcare/api/rest.rb', line 85

def document_conversions
  memoized(:@document_conversions) { Uploadcare::Api::Rest::DocumentConversions.new(rest: self) }
end

#file_metadata ⇒ Uploadcare::Api::Rest::FileMetadata

Returns File metadata operations endpoint.

Returns:



70
71
72
# File 'lib/uploadcare/api/rest.rb', line 70

def 
  memoized(:@file_metadata) { Uploadcare::Api::Rest::FileMetadata.new(rest: self) }
end

#file_tags ⇒ Uploadcare::Api::Rest::FileTags

Returns Per-file tag operations endpoint.

Returns:



75
76
77
# File 'lib/uploadcare/api/rest.rb', line 75

def file_tags
  memoized(:@file_tags) { Uploadcare::Api::Rest::FileTags.new(rest: self) }
end

#files ⇒ Uploadcare::Api::Rest::Files

Returns File operations endpoint.

Returns:



50
51
52
# File 'lib/uploadcare/api/rest.rb', line 50

def files
  memoized(:@files) { Uploadcare::Api::Rest::Files.new(rest: self) }
end

#get(path:, params: {}, headers: {}, request_options: {}) ⇒ Uploadcare::Result

Make a GET request wrapped in a Result.

Parameters:

  • path (String) —

    API endpoint path

  • params (Hash) (defaults to: {}) —

    Query parameters

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

    Additional request headers

  • request_options (Hash) (defaults to: {}) —

    Request options

Returns:



138
139
140
# File 'lib/uploadcare/api/rest.rb', line 138

def get(path:, params: {}, headers: {}, request_options: {})
  request(method: :get, path: path, params: params, headers: headers, request_options: request_options)
end

#groups ⇒ Uploadcare::Api::Rest::Groups

Returns Group operations endpoint.

Returns:



55
56
57
# File 'lib/uploadcare/api/rest.rb', line 55

def groups
  memoized(:@groups) { Uploadcare::Api::Rest::Groups.new(rest: self) }
end

#make_request(method:, path:, params: {}, query: {}, headers: {}, request_options: {}) ⇒ Hash, ...

Make an HTTP request to the REST API.

Parameters:

  • method (Symbol) —

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

  • path (String) —

    API endpoint path

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

    Request parameters

  • query (Hash) (defaults to: {}) —

    Query parameters for requests that also have a body

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

    Additional request headers

  • request_options (Hash) (defaults to: {}) —

    Request options (timeout, etc.)

Returns:

  • (Hash, Array, nil) —

    Parsed JSON response body

Raises:



106
107
108
109
110
111
112
113
114
115
# File 'lib/uploadcare/api/rest.rb', line 106

def make_request(method:, path:, params: {}, query: {}, headers: {}, request_options: {})
  handle_throttling(max_attempts: request_options[:max_throttle_attempts]) do
    response = connection.public_send(method, path) do |req|
      prepare_request(req, method, path, params, query, headers, request_options)
    end
    response.body
  end
rescue Faraday::Error => e
  handle_error(e)
end

#patch(path:, params: {}, headers: {}, request_options: {}) ⇒ Uploadcare::Result

Make a PATCH request wrapped in a Result.

Parameters:

  • path (String) —

    API endpoint path

  • params (Hash) (defaults to: {}) —

    Request body parameters

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

    Additional request headers

  • request_options (Hash) (defaults to: {}) —

    Request options

Returns:



160
161
162
# File 'lib/uploadcare/api/rest.rb', line 160

def patch(path:, params: {}, headers: {}, request_options: {})
  request(method: :patch, path: path, params: params, headers: headers, request_options: request_options)
end

#post(path:, params: {}, query: {}, headers: {}, request_options: {}) ⇒ Uploadcare::Result

Make a POST request wrapped in a Result.

Parameters:

  • path (String) —

    API endpoint path

  • params (Hash) (defaults to: {}) —

    Request body parameters

  • query (Hash) (defaults to: {}) —

    Query parameters

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

    Additional request headers

  • request_options (Hash) (defaults to: {}) —

    Request options

Returns:



125
126
127
128
129
# File 'lib/uploadcare/api/rest.rb', line 125

def post(path:, params: {}, query: {}, headers: {}, request_options: {})
  request(
    method: :post, path: path, params: params, query: query, headers: headers, request_options: request_options
  )
end

#project ⇒ Uploadcare::Api::Rest::Project

Returns Project information endpoint.

Returns:



60
61
62
# File 'lib/uploadcare/api/rest.rb', line 60

def project
  memoized(:@project) { Uploadcare::Api::Rest::Project.new(rest: self) }
end

#put(path:, params: {}, headers: {}, request_options: {}) ⇒ Uploadcare::Result

Make a PUT request wrapped in a Result.

Parameters:

  • path (String) —

    API endpoint path

  • params (Hash) (defaults to: {}) —

    Request body parameters

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

    Additional request headers

  • request_options (Hash) (defaults to: {}) —

    Request options

Returns:



149
150
151
# File 'lib/uploadcare/api/rest.rb', line 149

def put(path:, params: {}, headers: {}, request_options: {})
  request(method: :put, path: path, params: params, headers: headers, request_options: request_options)
end

#request(method:, path:, params: {}, query: {}, headers: {}, request_options: {}) ⇒ Uploadcare::Result

Wraps a request in a Result object.

Parameters:

  • method (Symbol) —

    HTTP method

  • path (String) —

    API path

  • params (Hash) (defaults to: {}) —

    Request parameters

  • query (Hash) (defaults to: {}) —

    Query parameters for requests that also have a body

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

    Request headers

  • request_options (Hash) (defaults to: {}) —

    Request options

Returns:



184
185
186
187
188
189
190
# File 'lib/uploadcare/api/rest.rb', line 184

def request(method:, path:, params: {}, query: {}, headers: {}, request_options: {})
  Uploadcare::Result.capture do
    make_request(
      method: method, path: path, params: params, query: query, headers: headers, request_options: request_options
    )
  end
end

#video_conversions ⇒ Uploadcare::Api::Rest::VideoConversions

Returns Video conversion endpoint.

Returns:



90
91
92
# File 'lib/uploadcare/api/rest.rb', line 90

def video_conversions
  memoized(:@video_conversions) { Uploadcare::Api::Rest::VideoConversions.new(rest: self) }
end

#webhooks ⇒ Uploadcare::Api::Rest::Webhooks

Returns Webhook operations endpoint.

Returns:



65
66
67
# File 'lib/uploadcare/api/rest.rb', line 65

def webhooks
  memoized(:@webhooks) { Uploadcare::Api::Rest::Webhooks.new(rest: self) }
end