Amazon-API
view release on metacpan or search on metacpan
lib/Amazon/API.pm view on Meta::CPAN
=head1 METHODS
=head2 new
new( options )
=over 5
=item credentials (required)
C<Amazon::Credentials> object or at least an object that
C<->can(get_aws_access_key_id)> and
C<->can(get_aws_secret_access_key)> and C<->can(get_token)>
=item user_agent
Your own user agent object or by default C<LWP::UserAgent>. Using
C<Furl>, if you have it avaiable may result in faster response.
=item api (reqired)
The name of the AWS service. Example: AWSEvents
=item url
The service url. Example: https://events.us-east-1.amazonaws.com
=item debug
0/1 - will dump request/response if set to true.
=item action
The API method. Example: PutEvents
=item content_type
Default content for references passed to the C<invoke_api()> method. The default is C<application/x-amz-json-1.1>.
=item protocol
One of 'http' or 'https'. Some Amazon services do not support https (yet).
=back
=cut
sub new {
my $class = shift;
my $self = $class->SUPER::new(@_);
unless ($self->get_user_agent) {
$self->set_user_agent(new LWP::UserAgent);
}
# some APIs are GET only (I'm talkin' to you IAM!)
$self->set_http_method('POST')
unless defined $self->get_http_method;
# note some APIs are global, hence an API may send '' to indicate global
$self->set_region('us-east-1')
unless defined $self->get_region;
unless ( $self->get_credentials ) {
$self->set_credentials( new Amazon::Credentials( { aws_secret_access_key => $self->get_aws_secret_access_key,
aws_access_key_id => $self->get_aws_access_key_id,
token => $self->get_token
})
);
}
$self->set_protocol('https')
unless $self->get_protocol();
unless ( $self->get_url ) {
if ( $self->get_service_url_base() ) {
if ( $self->get_region ) {
$self->set_url(sprintf("%s://%s.%s.amazonaws.com", $self->get_protocol, $self->get_service_url_base, $self->get_region));
}
else {
$self->set_url(sprintf("%s://%s.amazonaws.com", $self->get_protocol, $self->get_service_url_base));
}
}
else {
die "ERROR: no url or service_url defined.\n"
}
}
$self->set_signer(AWS::Signature4->new(-access_key => $self->get_credentials->get_aws_access_key_id,
-secret_key => $self->get_credentials->get_aws_secret_access_key)
);
if ( $self->get_api_methods ) {
no strict 'refs';
no warnings 'redefine';
foreach my $api (@{$self->get_api_methods}) {
my $method = lcfirst $api;
$method =~s/([a-z])([A-Z])/$1_$2/g;
$method = lc $method;
# snake case rules the day
*{"Amazon::API::" . $method} = sub { shift->invoke_api("$api", @_) };
# but some prefer camels
*{"Amazon::API::" . $api} = sub { shift->$method(@_) }; # pass on to the snake
}
}
$self->set_content_type('application/x-amz-json-1.1') unless
$self->get_content_type;
$self;
}
sub get_api_name {
my $self = shift;
return join("", map { ucfirst } split /_/, shift);
( run in 2.038 seconds using v1.01-cache-2.11-cpan-e1769b4cff6 )