NAME

Apache2::ASP::API - A public API for all Apache2::ASP web applications.

SYNOPSIS

use Apache2::ASP::API;

my $api = Apache2::ASP::API->new();

my HTTP::Response $res = $api->ua->get("/index.asp");
die $res->as_string unless $res->is_success;

DESCRIPTION

Wouldn't it be great if your website had its own public coding API? How about one that you could subclass and add your own features to?

That's what Apache2::ASP::API is all about.

Apache2::ASP::API provides a programatic interface to your Apache2::ASP web applications, allowing you to execute requests against ASP scripts and handlers just as you would from a browser, but without the use of an HTTP server.

Why do I need this?

Consider the case where you want to upload hundreds of files into your website, but you don't want to do it one-at-a-time.

The following snippet of code would do the trick:

#!/usr/bin/perl -w

use strict;
use warnings 'all';
use Apache2::ASP::API;

my $api = Apache2::ASP::API->new();

my @files = @ARGV or die "Usage: $0 <filename(s)>\n";

foreach my $file ( @files )
{
  # Assuming /handlers/MM is a subclass of Apache2::ASP::MediaManager:
  my $id = rand();
  my $res = $api->upload("/handlers/MM?mode=create&uploadID=$id", [
    filename => [ $file ]
  ]);
  
  die "Error on '$file': " . $res->as_string
    unless $res->is_success;
  
  print "'$file' uploaded successfully\n";
}# end foreach()

If only logged-in users may upload files, simply log in before uploading anything:

my $api = Apache2::ASP::API->new();

my $res = $api->ua->post("/handlers/user.login", {
  user_email    => $email,
  user_password => $password,
});

# Assuming $Session->{user} is set upon successful login:
unless( $api->session->{user} )
{
  die "Invalid credentials";
}# end unless()

... continue uploading files ...

Or...you could even subclass the API with your own:

package MyApp::API;

use strict;
use warnings 'all';
use base 'Apache2::ASP::API';

sub login
{
  my ($s, $email, $password) = @_;
  
  my $res = $s->ua->post("/handlers/user.login", {
    user_email    => $email,
    user_password => $password
  });
  
  # Assuming $Session->{user} is set upon successful login:
  unless( $api->session->{user} )
  {
    die "Invalid credentials";
  }# end unless()
  
  return 1;
}# end login()

1;# return true:

Then your uploader script could just do this:

#!/usr/bin/perl -w

use strict;
use warnings 'all';
use MyApp::API;

my $api = MyApp::API->new();
$api->login( 'test@test.com', 's3cr3t!' );

# Upload all the files:
$api->ua->upload("/handlers/MM?mode=create&uploadID=" . rand(), [
  filename => [ $_ ]
]) foreach @ARGV;

PUBLIC METHODS

Apache2::ASP::API is a subclass of Apache2::ASP::Test::Base and inherits everything from that class.

PUBLIC PROPERTIES

context

Read-only. Returns the current Apache2::ASP::HTTPContext object.

config

Read-only. Returns the current Apache2::ASP::Config object.

BUGS

It's possible that some bugs have found their way into this release.

Use RT http://rt.cpan.org/NoAuth/Bugs.html?Dist=Apache2-ASP to submit bug reports.

HOMEPAGE

Please visit the Apache2::ASP homepage at http://www.devstack.com/ to see examples of Apache2::ASP in action.

AUTHOR

John Drago <jdrago_999@yahoo.com>

COPYRIGHT

Copyright 2008 John Drago. All rights reserved.

LICENSE

This software is Free software and is licensed under the same terms as perl itself.