Each service request returns a response object. Responses provide access to response data and request/response metadata.
Each response has a hash of data that represents the data returned by the service. You can get at this data by calling {data} (you can also use the {#[]} method as a shortcut)
# make a request to describe one instance ec2 = AWS::EC2.new response = ec2.client.describe_instances(:instance_ids => ['i-12345678']) # find the instance in the response data (2 ways to get the data) instance = response[:reservation_set].first[:instance_set].first instance = response.data[:reservation_set].first[:instance_set].first instance[:status] #=> 'running'
In addition to the response data, there is additional information available with the response, including:
the name of the client request method called
the hash of options passed to the client request
the HTTP request object (useful for debugging)
the HTTP response object (useful for debugging)
Given the example and response object from above:
response.request_type #=> :describe_instances response.request_options #=> { :instance_ids => ['i-12345678'] } response.http_request #=> #<AWS::Core::Http::Request> response.http_response #=> #<AWS::Core::Http::Response>
@return [Boolean] true if the response was generated from a
another cached response.
@return [Boolean] true if the response was generated from a
another cached response.
@return [Hash] Returns the response data as a hash.
@return [Float] The total number of seconds taken to make the
request and return the response.
@return [AWS::Error,nil] Returns nil unless the request failed.
Normally this will be nil unless you are using the Asynchronous interface.
@return [Core::Http::Request]
@return [Core::Http::Response]
@return [Hash] Returns the hash of options passed to the client
request method that generated this response.
@return [Symbol] The name of the client request method that
returned this response.
@return [Integer] Returns the number of times the request
was retried.
@param [Http::Request] #http_request @param [Http::Response] #http_response
# File lib/aws/core/response.rb, line 97 def initialize http_request = nil, http_response = nil, &block @http_request = http_request @http_response = http_response @request_builder = block @data = {} @retry_count = 0 @duration = 0 rebuild_request if @request_builder && !http_request end
Provides access to the response data. This is a short-cut for calling +response.data+.
@param [Symbol,String] key @return [Hash,nil]
# File lib/aws/core/response.rb, line 112 def [] key data[key] end
@return [String] @private
# File lib/aws/core/response.rb, line 146 def cache_key [ http_request.access_key_id, http_request.host, request_type, serialized_options ].join(":") end
@return [String] @private
# File lib/aws/core/response.rb, line 140 def inspect data.inspect end
Rebuilds the HTTP request using the block passed to the initializer. This is primarily used by the client when a request must be retried (throttling, server errors, socket errors, etc). @private
# File lib/aws/core/response.rb, line 159 def rebuild_request @http_request = @request_builder.call end
@return [Boolean] Returns true if there is no response error.
# File lib/aws/core/response.rb, line 117 def successful? error.nil? end
@return [Boolean] Returns true if the http request was throttled
by AWS.
# File lib/aws/core/response.rb, line 123 def throttled? if !successful? and http_response.body error = XML::Parser.new.parse(http_response.body) error = error[:error] if error[:error] error[:code] == "Throttling" else false end end
@return [Boolean] Returns true if the http request timed out.
# File lib/aws/core/response.rb, line 134 def timeout? http_response.timeout? end
@note The prefered method to get as response data is to use {#[]}.
This provides a backwards-compat layer to the old response objects where each response value had a method extended onto this object. Now all response data is accessible as a hash.
@see #[] @see data
# File lib/aws/core/response.rb, line 174 def method_missing *args, &block Core::Data.new(data).send(*args, &block) end
# File lib/aws/core/response.rb, line 196 def serialize_options_array array "[" + array.map{|v| serialize_options_value(v) }.join(" ") + "]" end
# File lib/aws/core/response.rb, line 182 def serialize_options_hash(hash) "(" + hash.keys.sort_by(&:to_s).map do |key| "#{key}=#{serialize_options_value(hash[key])}" end.join(" ") + ")" end
# File lib/aws/core/response.rb, line 188 def serialize_options_value(value) case value when Hash then serialize_options_hash(value) when Array then serialize_options_array(value) else value.inspect end end
# File lib/aws/core/response.rb, line 178 def serialized_options serialize_options_hash(request_options) end