そのほかのWeb API-ECSの場合

そのほかのWeb API-ECSの場合


   ここまでいくつかのWeb APIの標準的な仕様を紹介してきました。しかし、これらの標準的な仕様を利用していないWeb APIもたくさんあります。例えば、広義のRESTとして紹介した、HTTPを利用してXMLをやり取りするだけの「XML on HTTP」とも呼ばれるAPIなどです。

   ここでそのいくつかを紹介しておきましょう。まずは、これまでも例に登場した、Amazonの提供するECSです。これはAmazonの商品情報を取得したり、ショッピングカートを操作できるAPIで、SOAPと(広義の)RESTのインターフェイスが用意されています。

   ECSにおけるRESTインターフェイスでは、エントリポイントとなるURLが用意され、パラメータを全てクエリ文字列としてそこに渡してアクセスすると、結果がXMLで取得できます。例えば、ItemLookupという、ASINコード(Amazonの商品管理コードで、書籍はISBNコードと同じ)で指定した商品の情報を取得するオペレーションを利用した場合のURLと、その結果をリスト21に示します。


リスト21:ECSでのリクエストとレスポンス
ECSでのリクエストとレスポンス
(画像をクリックすると別ウィンドウに拡大図を表示します)

   このような、URLにパラメータを渡して単純なXMLデータを受け取るタイプのAPIは、アクセスするのも、そしてAPIを公開するのも比較的簡単なので、多く利用されています。

   例えばECSへアクセスしてISBNコードから書籍名を取得するためのコードはリスト22のようになるでしょう。

リスト22:ECSで書籍名を取得するサンプル
ECSで書籍名を取得するサンプル
(画像をクリックすると別ウィンドウに拡大図を表示します)

   アクセスの際には必要な情報にあわせてURLを生成してデータを取得し、それを適当なXMLパーサー(ここではXML::Simpleを利用しています)に渡して中身を取り出せばいいだけです。なお、AWSAccessKeyIdに渡す値は20桁のAPI Keyで、あらかじめECSのサイトにアクセスして取得する必要があります。

   APIを公開する側にとってもこうしたシンプルな仕様は便利です。なぜならクエリ文字列で渡ってきたパラメータを解析して、それに応じてシンプルなデータを返せばいいからです。例えばXML-RPCのところでも作成した、2つの数字を受け取って足し算をして返すAPIを考えてみます。数字をURL中にnum1とnum2という名前をつけたクエリ文字列として埋め込んで渡してもらい、返すのは以下のようなシンプルなXMLです。

<?xml version="1.0"?>
<sumResult>
  <value>130</value>
</sumResult>

   こんなAPIならリスト23のような簡単なプログラムで実現できます。

リスト23:計算を行うAPIプログラム
#!/usr/bin/perl
use strict;
use warnings;
use CGI;

my $cgi = CGI->new;
my $num1 = $cgi->param('num1');
my $num2 = $cgi->param('num2');
my $result = $num1 + $num2;
my $response = <<"END";
Content-type: text/xml

<?xml version="1.0"?>
<sumResult>
  <value>$result</value>
</sumResult>
END

print $response;

   標準モジュールのCGI.pmを使ってクエリ文字列を取り出したら、後は計算をして、XMLとして出力します。その作業は単にすでに用意したXMLのテンプレートに数値を埋め込むだけの簡単なものです。自分で作ったオリジナルのXMLデータなので、別にXMLを出力するからといって構えることは何もないのです。

人気記事トップ10

人気記事ランキングをもっと見る

企画広告も役立つ情報バッチリ! Sponsored

ClickHouse Cloudが実現した広告運用SaaS「ATOM」のデータ基盤革新、パフォーマンスを向上しながら、運用負荷とコストを削減 11月11日 6:20 AIで開発が加速する時代、品質保証はどう変わる? Tricentisが示すAIエージェント活用の実像 11月9日 6:45 悪用までの猶予が「1分」に迫るフロンティアAI時代に開発と本番を貫く脆弱性管理が必要 10月29日 8:30 欧州CRA対応とSBOM運用。AI生成コードのOSS混入問題の対策とは ――スニペット単位で検出する「FossID」「Insignary Clarity」によるSBOM運用 9月16日 6:40 PostgreSQLからTiDBへ、稼働中SaaSで進める段階的DB移行の実践と再設計への展望 9月7日 6:30 機能安全開発におけるGoogleTestの活用を支援!「Parasoft C/C++test CT」で実現する効率化&AI連携 4月14日 6:30 【CNDW2025】Grafanaが明かす「オブザーバビリティの哲学」ー最小限の労力で実用的なインサイトを得るには 1月23日 6:30 【CNDW2025】プロダクト急増に備える基盤刷新 ーウェルスナビがECSからEKSへの移行で得た知見とは 1月15日 6:30 【CNDW2025】250環境を5人で運用、構築時間は30分に ーKINTOテクノロジーズが語るインフラ基盤組織の作り方 2025年12月18日 6:30 新たな自動化で熱視線! AIエージェントの「推論能力」を支える2つのコンポーネントとは? 2025年11月28日 6:30