ローレベルAPIを利用してDBを検索

ここではスパイラルAPIの中でローレベルAPIであるdatabase/selectメソッドを使ってスパイラルのDB内のレコードを検索して表示する方法を解説していきます。

なお、使用する言語はPHPです。APIを実行するためにPHPにcURLライブラリが組み込まれている必要があります。(参考:http://www.php.net/manual/ja/intro.curl.php

次のような手順になります。

  • 検索対象となるDBの発行・レコード登録
  • スパイラルAPIトークンの発行
  • ロケータAPIによりAPIサーバのURL取得
  • ローレベルAPIを利用してDBを検索

検索対象となるDBの発行・レコード登録

まずは、今回のAPIを実行する対象のDBを発行しましょう。DBタイトルはapi_sampleとして下さい。フィールド構成は以下のようにします。

フィールド名 差替えキーワード フィールドタイプ
メール mail メールアドレス(大・小文字を無視)
テキスト text テキストエリア(256 bytes)

DBが発行できたら、DBオペレーションやデータ登録機能を使って検索対象となるデータを入れておきましょう。

スパイラルAPIトークンの発行

「開発」→「スパイラルAPI」画面において、スパイラルAPIを実行する際に必ず必要になるAPIトークンを発行します。APIトークン発行方法についてはリファレンスを参照下さい。

ロケータAPIによりAPIサーバのURL取得

今回利用するdatabase/selectに限らず、通常APIを利用する際にはまずロケータサーバにAPIを実行する先のURLを問い合わせる必要があります。ロケータについてはリファレンスを参照下さい。

<?php

// ロケータのURL
$LOCATOR_URL = "https://www.pi-pe.co.jp/api/locator";

// スパイラルの操作画面で発行したAPIトークンを設定
$TOKEN = "XXXXXXXXXXXXXXXXXXXXXXXXXXX";

// API用のHTTPヘッダ
$api_headers = array(
  "X-SPIRAL-API: locator/apiserver/request",
  "Content-Type: application/json; charset=UTF-8",
);

// 送信するJSON用パラメータを作成
$parameters = array();
$parameters["spiral_api_token"] = $TOKEN;  // APIトークン

// 送信用のJSONデータを作成
$json = json_encode($parameters);

echo "===> locator/apiserver\n";

// cURLライブラリを使って送信
$curl = curl_init($LOCATOR_URL);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $json);
curl_setopt($curl, CURLOPT_HTTPHEADER, $api_headers);
curl_exec($curl);

// エラーがあればエラー内容を表示
if (curl_errno($curl)) echo curl_error($curl);

$response = curl_multi_getcontent($curl);
curl_close($curl);

// レスポンスJSONをデコードしてAPIサーバのURLを取得
$result = json_decode($response);
$API_URL = $result["location"];
echo $API_URL . "\n\n";

7行目のAPIトークンについては上記で発行したAPIトークンの値を記載するようにして下さい。

ローレベルAPIを利用してDBを検索

ここまでで準備は整いましたので、いよいよAPIを使ってDBの検索を実行します。

// スパイラルの操作画面で発行したトークンを設定します。
$TOKEN  = "XXXXXXXXXX";
$SECRET = "YYYYYYYYYY";

// API用のHTTPヘッダ
$api_headers = array(
    "X-SPIRAL-API: database/select/request",
    "Content-Type: application/json; charset=UTF-8",
);

// 送信するJSONデータを作成
$parameters = array();
$parameters["spiral_api_token"] = $TOKEN;       //トークン
$parameters["db_title"] = "api_sample"; //DBのタイトル
$parameters["passkey"] = time();       //エポック秒

// 表示カラム名
$parameters["select_columns"] = array("mail", "text");

// 検索条件
$parameters["search_condition"] = array(
    array("name" => "text", "value" => "テキスト%", "operator" => "LIKE"),
);

// 署名を付けます
$key = $parameters["spiral_api_token"] . "&" . $parameters["passkey"];
$parameters["signature"] = hash_hmac('sha1', $key, $SECRET, false);

// 送信用のJSONデータを作成します。
$json = json_encode($parameters);

echo "===> database/select\n";

// cURLライブラリを使って送信します。
$curl = curl_init($API_URL);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $json);
curl_setopt($curl, CURLOPT_HTTPHEADER, $api_headers);
curl_exec($curl);

if (curl_errno($curl)) echo curl_error($curl);

$response = curl_multi_getcontent($curl);
curl_close($curl);

// 画面に実行結果を表示
print_r(json_decode($response, true));

?>

先のロケータからAPIサーバのURLを取得する部分のコードと合わせて1つのPHPファイルを作り、これを実行することで以下のようにDBの検索結果が表示されるはずです。

===> locator/apiserver

https://regXXX.smp.ne.jp/api/service

===> database/select
Array
(
    [message] => OK
    [count] => 2
    [data] => Array
        (
            [0] => Array
                (
                    [0] => suzuki@example.com
                    [1] => テキストエリア
                )

            [1] => Array
                (
                    [0] => yamada@example.com
                    [1] => テキストエリア2
                )

        )

    [code] => 0
    [header] => Array
        (
            [0] => メールアドレス
            [1] => テキストエリア
        )

)

なお、リクエストパラメータのsearch_conditionに検索条件をしているため、このサンプルではtextフィールドの値が「テキスト」という文字列から始まっているレコードのみが表示されているはずです。そういったデータが含まれていない場合には検索結果が空になってしまいますので、DBオペレーションを使って該当するデータを挿入してから再度プログラムを実行してみてください。