NAME Net::HTTP::API - Easily create client for net API VERSION version 0.13 SYNOPSIS 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); DESCRIPTION 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: Net::HTTP::API::Role::UserAgent Net::HTTP::API::Role::Format Net::HTTP::API::Role::Authentication Net::HTTP::API::Role::Serialization Net::HTTP::API::Role::Request The following attributes are added to your class: api_base_url api_format api_username api_passord authentication authentication_method The following methods are added to your class: http_request get_content serialize deserialize content_type METHODS net_api_declare net_api_declare backtype => ( base_url => 'http://api....', format => 'json', format_mode => 'append', ); api_base_url 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. api_format The format for the API's calls. This will set the api_format attribut to your class. Value can be: json yaml xml api_format_mode 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: content-type append api_useragent 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; } authentication This is a boolean to tell if we must authenticate to use this API. authentication_method 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 ... } net_api_method description A string to describe the method (this is a documentation) method HTTP method (GET, POST, PUT, DELETE) path 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 params Arrayref of params. required Arrayref of required params. params_in_url When you do a post, the content may have to be sent as arguments in the url, and not as content in the header. AUTHOR franck cuny COPYRIGHT AND LICENSE 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.