<< 無知でした(^^;; | main | JAWS-UG勉強会 >>

PHPでWeb APIを作ってみた

2013.11.03 Sunday | by こも
Web APIを作りたいなぁという事例に突き当たりました。

Web APIの使い方に関してはググるとたくさん出てくるんですが、作り方については情報が少なくて困りました。
まぁでも、ただのXmlのテキスト出力ならば、なんとかできるかなぁと思ってやってみました。


今回はa値とb値の2つの入力値から和差積商を返す、シンプルなテスト用Web APIを作ってみました。

<?php
	// xml出力を指定
	header("Content-Type: text/xml");

	// 入力パラメータのチェック
	if(isset($_GET['a'])){
		$a = htmlspecialchars($_GET['a']);
		if(!is_numeric($a)){
			dispError("a が不正");
		}
	} else {
		dispError("a が未設定");
	}

	if(isset($_GET['b'])){
		$b = htmlspecialchars($_GET['b']);
		if(!is_numeric($b)){
			dispError("b が不正");
		}
	} else {
		dispError("b が未設定");
	}

	// 入力値から和差積商を計算
	$wa = $a + $b;
	$sa = $a - $b;
	$seki = $a * $b;
	if($b == 0){
		// ゼロ割はエラー
		$sho = "error";
	} else {
		$sho = $a / $b;
	}

	// 計算したものを出力
	echo "<?xml version='1.0' encoding='utf-8'?>";
	echo "<Result a='".$a."' b='".$b."'>";
	echo "<Wa>".$wa."</Wa>";
	echo "<Sa>".$sa."</Sa>";
	echo "<Seki>".$seki."</Seki>";
	echo "<Sho>".$sho."</Sho>";
	echo "</Result>";


	// エラーメッセージ関数
	function dispError($msg) {
		echo "<?xml version='1.0' encoding='utf-8'?>";
		echo "<Result>";
		echo "<Error>".$msg."</Error>";
		echo "</Result>";
		exit;
	}
?>

XMLで出力するというheader定義が重要なようです。
これがないと、html出力されてAPIとしては機能しない模様……。


動作確認のため、ローカル環境で次のようなパラメタで実行します。

http://localhost/testapi.php?a=100&b=20

[実行結果]

WebAPIテスト

すると思った通りの結果が返ってきました。

XML形式で出力されたら、あとはsimplexml_load_fileを使って普段通り解析して処理します。

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>API Test</title>
</head>

<body>
<?php
	$url ="http://localhost/testapi.php?a=100&b=20";

	// APIをリクエスト
	error_reporting(0);
	try {
		$result = simplexml_load_file($url);
	} catch (Exception $e) {
		error_reporting(E_ALL);
		return(0);
	} 
	error_reporting(E_ALL);

	if(isset($result->Error)){ 
		// エラー表示
		echo $result->Error;
	} else {
		// 計算結果を表示
		if(isset($result->Wa)){ 
			echo "和:".$result->Wa."<br>¥n";
		}
		if(isset($result->Sa)){ 
			echo "差:".$result->Sa."<br>¥n";
		}
		if(isset($result->Seki)){ 
			echo "積:".$result->Seki."<br>¥n";
		}
		if(isset($result->Sho)){ 
			echo "商:".$result->Sho."<br>¥n";
		}
	}
?>

</body>
</html>

[実行結果]

和:120
差:80
積:2000
商:5

細かい処理などは端折っていますが、最低限必要な部分はざっくりこんな感じでしょうか。
なんとか使えそうな気がしてきました。


Comment
Add Comment









Sponsored Link
Recommend
PHP 逆引きレシピ (PROGRAMMER'S RECiPE)
PHP 逆引きレシピ (PROGRAMMER'S RECiPE) (JUGEMレビュー »)
鈴木 憲治,安藤 建一,山田 直明,八木 照朗,山本 義之,河合 勝彦
Recommend
Recommend
Powered
無料ブログ作成サービス JUGEM