NAME
Web::API - Web::API - A Simple base module to implement almost every RESTful API with just a few lines of configuration
VERSION
version 1.1
SYNOPSIS
Implement the RESTful API of your choice in 10 minutes, roughly.
package Net::CloudProvider;
use Any::Moose;
with 'Web::API';
our $VERSION = "0.1";
has 'commands' => (
is => 'rw',
default => sub {
{
list_nodes => { method => 'GET' },
node_info => { method => 'GET', require_id => 1 },
create_node => {
method => 'POST',
default_attributes => {
allowed_hot_migrate => 1,
required_virtual_machine_build => 1,
cpu_shares => 5,
required_ip_address_assignment => 1,
primary_network_id => 1,
required_automatic_backup => 0,
swap_disk_size => 1,
},
mandatory => [
'label',
'hostname',
'template_id',
'cpus',
'memory',
'primary_disk_size',
'required_virtual_machine_build',
'cpu_shares',
'primary_network_id',
'required_ip_address_assignment',
'required_automatic_backup',
'swap_disk_size',
]
},
update_node => { method => 'PUT', require_id => 1 },
delete_node => { method => 'DELETE', require_id => 1 },
start_node => {
method => 'POST',
require_id => 1,
post_id_path => 'startup',
},
stop_node => {
method => 'POST',
require_id => 1,
post_id_path => 'shutdown',
},
suspend_node => {
method => 'POST',
require_id => 1,
post_id_path => 'suspend',
},
};
},
);
sub commands {
my ($self) = @_;
return $self->commands;
}
sub BUILD {
my ($self) = @_;
$self->user_agent(__PACKAGE__ . ' ' . $VERSION);
$self->base_url('https://ams01.cloudprovider.net/virtual_machines');
$self->content_type('application/json');
$self->extension('json');
$self->wrapper('virtual_machine');
$self->mapping({
os => 'template_id',
debian => 1,
id => 'label',
disk_size => 'primary_disk_size',
});
return $self;
}
1;
later use as:
use Net::CloudProvider;
my $nc = Net::CloudProvider(user => 'foobar', api_key => 'secret');
my $response = $nc->create_node({
id => 'funnybox',
hostname => 'node.funnybox.com',
os => 'debian',
cpus => 2,
memory => 256,
disk_size => 5,
allowed_hot_migrate => 1,
required_virtual_machine_build => 1,
cpu_shares => 5,
required_ip_address_assignment => 1,
});
ATTRIBUTES
commands
most important configuration part of the module which has to be provided by the module you are writing.
the following keys are valid/possible:
method
require_id
path
pre_id_path
post_id_path
wrapper
default_attributes
mandatory
extension
content_type
incoming_content_type
outgoing_content_type
the request path for non require_id commands is being build as:
$base_url/$path.$extension
accordingly requests with require_id:
$base_url/$pre_id_path/$id/$post_id_path.$extension
whereas $id can be any arbitrary object like a domain, that the API in question does operations on.
base_url (required)
get/set base URL to API, can include paths
api_key (required)
get/set api_key
user (optional)
get/set username/account name
api_key_field (optional)
get/set name of the hash key in the POST data structure that has to hold the api_key
mapping (optional)
supply mapping table, hashref of format { key => value }
default: undef
wrapper (optional)
header (optional)
get/set custom headers sent with each request
get/set authentication type. currently supported are only 'basic', 'hash_key', 'get_params', 'oauth_header', 'oauth_params' or 'none'
default: none
default_method (optional)
get/set default HTTP method
default: GET
extension (optional)
get/set file extension, e.g. '.json'
user_agent (optional)
get/set User Agent String
default: "Web::API $VERSION"
timeout (optional)
get/set LWP::UserAgent timeout
strict_ssl (optional)
enable/disable strict SSL certificate hostname checking
default: false
agent (optional)
get/set LWP::UserAgent object
content_type (optional)
default: 'text/plain'
incoming_content_type (optional)
default: undef
outgoing_content_type (optional)
default: undef
debug (optional)
default: 0
cookies (optional)
default: HTTP::Cookies->new
consumer_secret (required for all oauth_* auth_types)
default: undef
access_token (required for all oauth_* auth_types)
default: undef
access_secret (required for all oauth_* auth_types)
default: undef
signature_method (required for all oauth_* auth_types)
default: undef
oauth_post_body (required for all oauth_* auth_types)
default: true
INTERNAL SUBROUTINES/METHODS
nonce
generates new OAuth nonce for every request
decode
encode
talk
map_options
wrap
AUTOLOAD magic
BUGS
Please report any bugs or feature requests on GitHub's issue tracker https://github.com/nupfel/Web-API/issues. Pull requests welcome.
SUPPORT
You can find documentation for this module with the perldoc command.
perldoc Web::API
You can also look for information at:
GitHub repository
MetaCPAN
AnnoCPAN: Annotated CPAN documentation
CPAN Ratings
AUTHOR
Tobias Kirschstein <lev@cpan.org>
COPYRIGHT AND LICENSE
This software is Copyright (c) 2013 by Tobias Kirschstein.
This is free software, licensed under:
The (three-clause) BSD License