2013/10/29 久米
Application Program Interface
webアプリケーションがみずからの機能を外部利用者(ソフトや人)に使用できるようにするインターフェース
通常GETやPOST送信でパラメータを付加して送り(付加しない場合もある)
その結果(通常JSONかXML)をもらうこと
本節では実際に簡単なAPIを作ってみる。
データベースなどから読み取ったデータをJSONファイルで配信する方法
| json | |
| メソッド | $arr = 連想配列; | 
| つまり | 連想配列でデータを準備し(通常はデータベースから読み取る) jsonファイルを生成するのはjson_encodeメソッドを使う | 
通常はDBから読み取ったデータをJsonにするが、下記では簡単のためphpで作ったデータをJsonにしている。
| json | |
| 生成例 | <?php /*$arr = array( 'book' => array( array( 'ISBN'=>'1254003', 'category'=>'小説', 'title'=>'我輩は猫である', 'price'=>500 ), array( 'ISBN'=>'25004000', 'category'=>'小説', 'title'=>'坊ちゃん', 'price'=>600 ), array( 'ISBN'=>'40880500', 'category'=>'漫画', 'title'=>'スラムダンク', 'price'=>400 ) ) );*/ //$arr["shop"]="yajimaya"; | 
| 確認例 | <?php $json = file_get_contents("http://から上記phpファイルを指定"); if ($json == false) { print "保守中です"; return; } $obj = json_decode($json); $book = $obj->book; $ttl0 = $book[0]->title; $ttl1 = $obj->book[1]->title; print "$ttl0 $ttl1 \n"; ?> | 
データベースから読み取り、json形式で出力するスクリプト例
| <?php $con=mysqli_connect("localhost", "root", "", "web2"); mysqli_set_charset($con, "UTF8"); $sql="SELECT * FROM webseiseki"; $rst=mysqli_query($con, $sql); $arr=array(); $i=0; while($row=mysqli_fetch_array($rst)){ $arr["seiseki"][$i]["name"]=$row["name"]; $arr["seiseki"][$i]["design"]=$row["design"]; $arr["seiseki"][$i]["script"]=$row["script"]; $arr["seiseki"][$i]["team"]=$row["team"]; $i++; } mysqli_free_result($rst); $cls=mysqli_close($con); $json = json_encode($arr); | 
データベースなどから読み取ったデータをXMLファイルで配信する方法
| XML | |
| 方法 | 手作りで生成する方法と | 
データベースから読み取り、xml形式で出力するスクリプト例
| 
<?php
$con=mysqli_connect("localhost", "root", "", "web2"); | 
PHPのDOMオブジェクトを使用すれば、より簡単にxmlファイルを作成し保存できる。
(JSON用のオブジェクトは標準ではまだ無い)
下記使用例は、管理者がフォーム投稿により、xmlファイル作成保存を行なっている。
もちろんprintで表示してもよい。
| 
<?php
$m="";
if(isset($_POST["sub"])) {
    $file_name="my_xml.xml";
    if($_POST["file_name"]!="")$file_name=$_POST["file_name"];
    $name_value=mb_convert_encoding($_POST["name"], "UTF-8");
    $price_value=mb_convert_encoding($_POST["price"], "UTF-8");
    
    $dom = new DomDocument("1.0", "UTF-8");
    
    //ノードの作成
    $turukame = $dom->createElement("turukame");
    $shohin = $dom->createElement("shohin");
    $name =$dom->createElement("name", $name_value);
    $price =$dom->createElement("price", $price_value);
    
    //各ノードを商品ノードに配置
    $shohin->appendChild($name);
    $shohin->appendChild($price);
    
    //商品ノードをつるかめノードに配置
    $turukame->appendChild($shohin);
    
    //つるかめノードをトップに配置
    $dom->appendChild($turukame);
    
    //ファイル保存
    $dom->save($file_name);
    
    $m= "保存しました";
}
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>xmlファイル保存</title>
</head>
<body>
<h1>xmlファイル保存</h1>
<form method="post" name="f" action="<?php print $_SERVER['PHP_SELF']; ?>">
ファイル名:<input type="text" name="file_name"><br>
商品名:<input type="text" name="name"><br>
価格:<input type="text" name="price"><br>
<input type="submit" name="sub" value="作成"><br>
</form>
<p><?php print $m; ?></p>
</body>
</html>
 | 
| 昔のコラム再掲 連想配列の=>連想配列や自分でキーを割り振りたい場合には「 => 」という記号を使います。 改行しているのは見やすくするためです。必要なければ1行で書いても構いません。 上記の例は以下のように書くのと同じです。 多次元配列を作成したい場合はarray()関数をネスト(入れ子)します。 ややこしいですが、実際にサンプルを見た方が分かりやすいです。 これは以下のように書くのと同様です。 $food["fruit"]["apple"]  = "りんご"; 
 | 
| json_encodeの出力json_encoesの出力は、なにも指定しないと通常下記のように\uxxxxの形式になる。 \u30b9\u30e9\u30e0\u30c0\u30f3\u30af これはunicodeでエスケープされているためである。(UTF-16で符号化されたコード) これがいやで生の日本語で出力したい場合は、かつPHP5.4以降であれば、 $json = json_encode($arr, JSON_UNESCAPED_UNICODE); 
 
 
 |