Hi Francisco,

2020-04-22 11:21:31 -0300 Francisco Acuña:
> Good day, I've been getting familiarized with Perl for the last couple of
> days due to a RT integration project I've been handed. I've also been doing
> a lot of research and a lot of asking around in forums for pointers on how
> to properly achieve this.
> 
> I'm glad to say that I managed to get all my basic scrips up and running,
> retrieving all the values I needed and updating all the fields I wanted to
> update. I now need to get to the part of actually interacting with the
> external RESTful API.
> 
> If what I understood from my research is correct, I will be working with
> the REST::Client and JSON modules. And what I need to do is:
> 
>    1. Encode the values I want to pass over to the API into a JSON object.
>    2. Do some coding on the other side in order to achieve my desired
>    funcionalities and pass some values back to RT (for this I won't need your
>    help since the coding won't be done in Perl, sadly)
>    3. Decode the response I get back to Perl and use those values in RT to
>    do some more updating.
> 
> I would greatly appreciate if you could provide me with some pointers and
> code examples of this being done. Choosing the values I need to pass,
> encoding them, passing them over to the API, and then decoding the response.
> 
> Needless to say, I am documenting all my work and will gladly share my
> experience in this project and all the coding work in any forum.

One way to do it is like this:

use strict;
use warnings;
use feature 'say';
use LWP::UserAgent;
use JSON;

my $ua = LWP::UserAgent->new;
my $uri = 'https://example.com/path/to/something';
my %headers = ('Content-Type' => 'application/json');

# here are the values to pass to the API
my %values = (number => 1, name => 'etc');

my $res = $ua->post(
    $uri,
    %headers,
    Content => JSON::encode_json(\%values)
);

if ($ua->is_success) {
    # if you're receiving a JSON
    my $data = JSON::decode_json $res->content;
    # now $data is a Perl data structure; it's the decoded JSON

    # but if you're receiving (say) HTML
    say $res->decoded_content;
}
else {
    # handle errors here
}

See these docs for the modules' details:
https://metacpan.org/pod/LWP::UserAgent
https://metacpan.org/pod/JSON

Attachment: signature.asc
Description: PGP signature

Reply via email to