WebService::Simple - Simple Interface To Web Services APIs
use WebService::Simple; # Simple use case my $flickr = WebService::Simple->new( base_url => "http://api.flickr.com/services/rest/", param => { api_key => "your_api_key", } ); # send GET request to # http://api.flickr.com/service/rest/?api_key=your_api_key&method=flickr.test.echo&name=value $flickr->get( { method => "flickr.test.echo", name => "value" } ); # send GET request to # http://api.flickr.com/service/rest/extra/path?api_key=your_api_key&method=flickr.test.echo&name=value $flickr->get( "extra/path", { method => "flickr.test.echo", name => "value" });
WebService::Simple is a simple class to interact with web services.
It's basically an LWP::UserAgent that remembers recurring API URLs and parameters, plus sugar to parse the results.
my $flickr = WebService::Simple->new( base_url => "http://api.flickr.com/services/rest/", param => { api_key => "your_api_key", }, # compression => 0 # content_type => 'application/json' # croak => 0 # debug => 1 );
Create and return a new WebService::Simple object. "new" Method requires a base_url of Web Service API.
By default, the module calls Carp::croak (dies) on unsuccessful HTTP requests. If you want to change this behaviour, set croak to FALSE and get() or post() will return the HTTP::Response object on success and failure, just like the base LWP::UserAgent.
By default the module will attempt to use HTTP compression if the Compress::Zlib module is available. Pass compress => 0 to ->new() to disable this feature.
If debug is set, the request URL will be dumped via warn() on get or post method calls .
my $response = $flickr->get( { method => "flickr.test.echo", name => "value" } );
Send a GET request, and you can get the WebService::Simple::Response object. If you want to add a path to base URL, use an option parameter.
my $lingr = WebService::Simple->new( base_url => "http://www.lingr.com/", param => { api_key => "your_api_key", format => "xml" } ); my $response = $lingr->get( 'api/session/create', {} );
Send a POST request.
my $ws = WebService::Simple->new( base_url => 'http://example.com/', param => { aaa => 'zzz' }, ); my $response = $ws->post('api/echo', { hello => 'world'});
By default, POST requests will have Content-Type application/x-www-form-urlencoded. That means, the content of a post request, the message body, is a string of your urlencoded parameters. You can change this by setting a different default value upon construction by passing content_type => 'application/json' to ->new(). Or on a per-request basis by setting the Content-Type header. JSON request encoding is currently the only supported content type for this feature.
my $ws = WebService::Simple->new( base_url => 'http://example.com/', param => { aaa => 'zzz' }, # content_type => 'application/json', # either here ); my $response = $ws->post('api/echo', { hello => 'world' }, 'Content-Type' => 'application/json'); # or here
Return request URL.
Each request is prepended by an optional cache look-up. If you supply a Cache object to new(), the module will look into the cache first.
my $cache = Cache::File->new( cache_root => '/tmp/mycache', default_expires => '30 min', ); my $flickr = WebService::Simple->new( base_url => "http://api.flickr.com/services/rest/", cache => $cache, param => { api_key => "your_api_key, } );
See PARSERS below.
For better encapsulation, you can create subclass of WebService::Simple to customize the behavior
package WebService::Simple::Flickr; use base qw(WebService::Simple); __PACKAGE__->config( base_url => "http://api.flickr.com/services/rest/", upload_url => "http://api.flickr.com/services/upload/", ); sub test_echo { my $self = shift; $self->get( { method => "flickr.test.echo", name => "value" } ); } sub upload { my $self = shift; local $self->{base_url} = $self->config->{upload_url}; $self->post( Content_Type => "form-data", Content => { title => "title", description => "...", photo => ... }, ); }
Web services return their results in various different formats. Or perhaps you require more sophisticated results parsing than what WebService::Simple provides.
WebService::Simple by default uses XML::Simple, but you can easily override that by providing a parser object to the constructor:
my $service = WebService::Simple->new( response_parser => AVeryComplexParser->new, ... ); my $response = $service->get( ... ); my $thing = $response->parse_response;
For example. If you want to set XML::Simple options, use WebService::Simple::Parser::XML::Simple including this module:
use WebService::Simple; use WebService::Simple::Parser::XML::Simple; use XML::Simple; my $xs = XML::Simple->new( KeyAttr => [], ForceArray => ['entry'] ); my $service = WebService::Simple->new( base_url => "http://gdata.youtube.com/feeds/api/videos", param => { v => 2 }, response_parser => WebService::Simple::Parser::XML::Simple->new( xs => $xs ), );
This allows great flexibility in handling different Web Services
https://github.com/yusukebe/WebService-Simple
Yusuke Wada <yusuke@kamawada.com>
<yusuke@kamawada.com>
Daisuke Maki <daisuke@endeworks.jp>
<daisuke@endeworks.jp>
Matsuno Tokuhiro
Naoki Tomita (tomi-ru)
This module is free software; you can redistribute it and/or modify it under the same terms as Perl itself. See perlartistic.
To install WebService::Simple, copy and paste the appropriate command in to your terminal.
cpanm
cpanm WebService::Simple
CPAN shell
perl -MCPAN -e shell install WebService::Simple
For more information on module installation, please visit the detailed CPAN module installation guide.