API-Drip-Request
view release on metacpan or search on metacpan
lib/API/Drip/Request.pm view on Meta::CPAN
if ( $OPT{debugger} ) { return $OPT{debugger} }
return sub { warn join "\n", map { ref($_) ? np $_ : $_ } @_ };
}
=head2 do_request
Accepts the following positional parameters:
=over
=item HTTP Method (required)
May be 'GET', 'POST', 'DELETE', 'PATCH', etc..
=item Endpoint (requird)
Specifies the path of the REST enpoint you want to query. Include everything after the account ID. For example, "subscribers", "subscribers/$subscriber_id/campaign_subscriptions", etc...
=item Content (optional)
Perl hashref of data that will be sent along with the request.
=back
On success, returns a Perl data structure corresponding to the data returned
from the server. Some operations (DELETE), do not return any data and may
return undef on success. On error, this method will die() with the
HTTP::Response object.
=cut
my $request_validator = validation_for( params => [ {type => Str()}, {type => Str()}, {type => HashRef(), optional => 1} ] );
sub do_request {
my $self = shift;
my ($method, $endpoint, $content) = $request_validator->(@_);
my $uri = URI->new($self->{DRIP_URI});
$uri->path_segments( $uri->path_segments, $self->{DRIP_ID}, split( '/', $endpoint) );
$self->{debugger}->( 'Requesting: ' . $uri->as_string );
my $request = HTTP::Request->new( $method => $uri->as_string, );
if ( ref($content) ) {
$request->content_type('application/vnd.api+json');
$request->content( encode_json( $content ) );
}
$request->authorization_basic( $self->{DRIP_TOKEN}, '' );
$self->{agent} //= LWP::UserAgent->new( agent => $self->{DRIP_AGENT} );
my $result = $self->{agent}->request( $request );
unless ( $result->is_success ) {
$self->{debugger}->("Request failed", $result->content);
die $result;
}
if ( $result->code == 204 ) {
$self->{debugger}->("Success, no content");
return undef;
}
my $decoded = eval {decode_json( $result->content )};
if ( $@ ) {
$self->{debugger}->('Failed to decode JSON:', $@, $result->content);
die $result;
}
return $decoded;
}
=head1 CONFIGURATION
Configuration data may be passed in through a number of different ways, which are searched in the following order of preference:
=over
=item 1. As direct paramteters to new().
=item 2. As environment variables.
=item 3. As elments of the first YAML configuration file that is found and readable in the following locations:
=over
=item 1. The location specified by the DRIP_CLIENT_CONF parameter supplied to new().
=item 2. The location specified by $ENV{DRIP_CLIENT_CONF}.
=item 3. $ENV{HOME}/.drip.conf
=back
=back
The following configuration data is accepted:
=over
=item * DRIP_TOKEN (required)
This is the user token assigned to you by drip. When you are logged in, look for "API Token" at https://www.getdrip.com/user/edit
=item * DRIP_ID (required)
This is the numeric user id assigned to you by drip. When logged in, find it in your settings under Account->General Info.
=item * DRIP_URI (optional)
This defaults to https://api.getdrip.com/v2. You probably shouldn't change this.
=item * DRIP_AGENT (optional)
Defaults to "API::Drip". Specifies the HTTP Agent header.
=item * DRIP_DEBUG (optional)
Defaults to 0. Set to a true value to enable debugging.
=cut
sub _load_conf {
my $OPT = shift();
my $conf = {};
KEY:
foreach my $key ( keys %DEFAULTS ) {
next KEY if defined $OPT->{$key};
( run in 1.185 second using v1.01-cache-2.11-cpan-6b5c3043376 )