[PHP]PHPで作るWebAPIその2 POSTでJSON受信する

投稿者:

前回GETでリクエストされたデータをJSONで返すプログラムを紹介した。
今回はPOSTされたJSONデータを受け取り、その後の処理に繋げる方法を記す。
JSONはPOSTのパラメータとして受け取るのではなく本文データ(body)として受け取る。
その方法は以下の通り

$body = file_get_contents('php://input');

受け取ったJSONデータは 関数 json_decode() で配列に変換して扱いやすくする。このとき第二引数を true にすると連想配列に変換される。

$json = json_decode($body, true);

基本的な処理方法はこんな感じ。
後は配列から値を取り出し、様々な処理に使用すればよい。
次の例はPOSTされたJSONデータを使ってデータベースを更新するプログラムである。

……と、その前に、受け取るJSONの仕様を次のように定義しておく

denno : 伝票No
meisaiarray : 伝票明細の配列
meisaino : 伝票明細の要素(伝票明細No)
itemcode : 伝票明細の要素(商品コード)
suryou : 伝票明細の要素(数量)

こんな感じのJSONデータを受け取ると想定する。
↓↓↓↓↓↓↓↓

{
"denno": 10000001,
"meisaiarray": [
{
"meisaino": 1,
"itemcode": "code001",
"suryo": 3
},
{
"meisaino": 2,
"itemcode": "code002",
"suryo": 15
}
]
}

前回同様データベースはPostgreSQLを使っているが、他のデータベースに応用可能だ。

<?php
    #定数
    define('PG_CONNECT_STRING', 'host=localhost port=5432 dbname=mydb user=oreore password=orenopass'); //DB接続文字列

    $body = file_get_contents('php://input');   //BODYの取得

    if (is_null($body)) {
        # error データが無い
        http_response_code(500);        //HTTPレスポンスコード(500サーバーエラー)
        echo "no data (JSON)";
        exit();
    }

    $json = json_decode($body, true);   //JSONに変換 第二引数をTrueにすると連想配列になる
    if (is_null($json)) {
        # error JSONをデコードできない
        http_response_code(500);        //HTTPレスポンスコード(500サーバーエラー)
        echo "JSON error";
        exit();
    }

    #PostgeSQLに接続
    $pgconn = pg_connect(PG_CONNECT_STRING);
    if (!$pgconn) {
        # error DBに接続できない
        http_response_code(500);        //HTTPレスポンスコード(500サーバーエラー)
        echo "cannot connect PostgreSQL";
        exit();
    }

    $denno    = $json['denno'];             //伝票No
    $meisaiarray = $json['meisaiarray'];    //明細の配列
    
    for ($i=0; $i < sizeof($meisaiarray); $i++) {
        # 要素の取り出し
        $denno      = (int)$meisaiarray[$i]['denno'];
        $meisaino   = (int)$meisaiarray[$i]['meisaino'];
        $itemcode   = (string)$meisaiarray[$i]['itemcode'];
        $suryou     = (int)$meisaiarray[$i]['suryou'];

        # SQLを作成
        $sql = "UPDATE denpyotable SET" .
            " meisaino=" . $meisaino .
            ",itemcode='" . $itemcode . "'" .
            ",suryou=" . $suryou .
            " WHERE denno=" . $denno . ";";
        pg_exec($pgconn, $sql); //SQL実行
    }
    pg_close($pgconn);          //DB接続切断

    http_response_code(200);    //HTTPレスポンスコード(200正常終了)

    exit();
?>

1件のコメント

返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください