Top image

Perl Monk

主にPerlとRaspberryPiの個人的技術研鑽

シンプルなWEB APIインターフェースをPerlで作る

2019/06/04 19:00
category:Perl

極力シンプルな形で、HTTPを使ったAPIでデータをやりとりをする方法を考えます。

出力側ソース

#!/usr/bin/perl
use strict;
use warnings;
use JSON;
my $data = {
	'key1' => '123',
	'key2' => 'abc',
	'key3' => 'あいう',
};
print "Content-Type: application/json; charset=UTF-8\n\n";
print JSON->new->utf8(0)->encode($data);
exit;

jsonモジュールを使って、json形式でそのまま出力させます。

無名ハッシュをエンコードして渡しています。

curlで叩いた出力

$ curl http://127.0.0.1/test/output.cgi
{"key2":"abc","key1":"123","key3":"あいう"}

問題ないですね。

入力側ソース

#!/usr/bin/perl
use strict;
use warnings;
use LWP::UserAgent;
use JSON;
use Encode;
my $url = "http://127.0.0.1/test/output.cgi";
my $request  = HTTP::Request->new(GET => $url );
my $ua = LWP::UserAgent->new;
$request->header("Content-Type" => "application/json");
my $response  = $ua->request($request);
if ( $response->is_success ) {
	my $json = JSON->new->decode($response->content);
	for my $key (keys %$json) {
		print "$key  > $$json{$key}\n";
	}
}

LWP::UserAgentモジュールをつかってリクエストし、受信データをjsonでデコードします。

実行結果

$ ./input.pl
key2  > abc
key1  > 123
key3  > あいう

エラー処理とかは全く考慮してないですが、今の自分の知識ではこんなもんですね。