Net::HTTP::API - Easily create client for net API
version 0.14
package My::Net::API; use Net::HTTP::API; # we declare an API, the base_url is http://exemple.com/api # the format is json and it will be append to the query # You can set api_base_url later, calling $obj->api_base_url('http://..') net_api_declare my_api => ( api_base_url => 'http://exemple.com/api', api_format => 'json', api_format_mode => 'append', ); # declaring a users method # calling $obj->users will call http://exemple.com/api/users/france net_api_method users => ( description => 'this get a list of users', method => 'GET', path => '/users/:country', params => [qw/country/], ); # you can create your own useragent (it must be a LWP::UserAgent object) net_api_declare my_api => ( ... useragent => sub { my $ua = LWP::UserAgent->new; $ua->agent('MyUberAgent/0.23'); return $ua }, ... ); # if the API require authentification, the module will handle basic # authentication for you net_api_declare my_api => ( ... authentication => 1, ... ); # if the authentication is more complex, you can delegate to your own method 1; my $obj = My::Net::API->new(); $obj->api_base_url('http://...'); $obj->foo(user => $user);
Net::HTTP::API is a module to help to easily create a client for a web API.
This module is heavily inspired by what Net::Twitter does.
THIS MODULE IS IN ITS BETA QUALITY. THE API MAY CHANGE IN THE FUTURE
The following roles are added to your class:
The following attributes are added to your class:
The following methods are added to your class:
net_api_declare backtype => ( base_url => 'http://api....', format => 'json', format_mode => 'append', );
The base url for all the API's calls. This will set the api_base_url attribut in your class. Can be set at the object creation or before calling an API method.
The format for the API's calls. This will set the api_format attribut to your class. Value can be:
How the format is handled. append will add .$format to the query, content-type will set the content-type information to the header of the request. Should be one the following value:
A LWP::UserAgent object.
useragent => sub { my $ua = LWP::UserAgent->new; $ua->agent( "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1"); return $ua; }
This is a boolean to tell if we must authenticate to use this API.
The default authentication method only set an authorization header using the Basic Authentication Scheme. You can write your own authentication method:
net_api_declare foo => ( ... authentication_method => 'my_auth_method', ... ); sub my_auth_method { my ($self, $req) = @_; #$req is an HTTP::Request object ... }
A string to describe the method (this is a documentation)
HTTP method (GET, POST, PUT, DELETE)
path of the query.
If you defined your path and params like this
net_api_method user_comments => ( ... path => '/user/:user/list/:date', params => [qw/user date foo bar/], ... );
and you call
$obj->user_comments(user => 'franck', date => 'today', foo => 1, bar => 2);
the url generated will look like
/user/franck/list/today/?foo=1&bar=2
Arrayref of params.
Arrayref of required params.
When you do a post, the content may have to be sent as arguments in the url, and not as content in the header.
franck cuny <franck@lumberjaph.net>
This software is copyright (c) 2010 by linkfluence.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.
To install Net::HTTP::API, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Net::HTTP::API
CPAN shell
perl -MCPAN -e shell install Net::HTTP::API
For more information on module installation, please visit the detailed CPAN module installation guide.