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);
|