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, 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

#authenticatorUploadcare::Internal::Authenticator (readonly)



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

def authenticator
  @authenticator
end

#configUploadcare::Configuration (readonly)



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

def config
  @config
end

#connectionFaraday::Connection (readonly)

Returns:

  • (Faraday::Connection)


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

def connection
  @connection
end

Instance Method Details

#addonsUploadcare::Api::Rest::Addons

Returns Add-on operations endpoint.

Returns:



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

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:



151
152
153
# File 'lib/uploadcare/api/rest.rb', line 151

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

#document_conversionsUploadcare::Api::Rest::DocumentConversions

Returns Document conversion endpoint.

Returns:



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

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

#file_metadataUploadcare::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

#filesUploadcare::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:



129
130
131
# File 'lib/uploadcare/api/rest.rb', line 129

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

#groupsUploadcare::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: {}, headers: {}, request_options: {}) ⇒ Hash, ...

Make an HTTP request to the REST API.

Parameters:

  • method (Symbol)

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

  • path (String)

    API endpoint path

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

    Request parameters

  • 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:



100
101
102
103
104
105
106
107
108
109
# File 'lib/uploadcare/api/rest.rb', line 100

def make_request(method:, path:, params: {}, 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, headers, request_options)
    end
    response.body
  end
rescue Faraday::Error => e
  handle_error(e)
end

#post(path:, params: {}, 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

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

    Additional request headers

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

    Request options

Returns:



118
119
120
# File 'lib/uploadcare/api/rest.rb', line 118

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

#projectUploadcare::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:



140
141
142
# File 'lib/uploadcare/api/rest.rb', line 140

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: {}, 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

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

    Request headers

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

    Request options

Returns:



163
164
165
166
167
# File 'lib/uploadcare/api/rest.rb', line 163

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

#video_conversionsUploadcare::Api::Rest::VideoConversions

Returns Video conversion endpoint.

Returns:



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

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

#webhooksUploadcare::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