SPIRALは、主にエンタープライズ向けのローコードプラットフォームになります。ローコードプラットフォームなので、プログラミング知識がなくともWebアプリケーションを開発できるのが魅力です。
SPIRALでは、自社のシステムや外部システムと連携する場合を想定して、APIが公開されています。今回は、そのAPIを利用して、複数レコードを一括更新する流れを解説します。
注意点
SPIRALでは、SPIRAL内部で動作するアカウント内APIと、外部APIの2種類があります。アカウント内APIでは、簡単に操作できるPHP SDKがありますが、外部公開はされていません。そのため、今回はPHPの file_get_contents
などを使ってAPI操作をしています。
準備
APIトークンの取得
SPIRALの管理画面で、APIトークンを作成します。ダッシュボードの開発メニュー内のAPIトークンにて、新しいAPIトークンを作成します。
作成後に入手できるAPIトークンと、APIトークンシークレットをメモしておきます。
データベースの作成
今回は、作成したのは通常DBになります。SPIRALでは、この他8種類のデータベースが利用できます。
データベースの名前は testdata
としました。作成したフィールドは以下の通りです。
フィールド名 | サンプル値 | 型 | 差し替えキーワード |
---|---|---|---|
名前 | テキスト30文字前後 | テキストフィールド(64 bytes) | name |
フリガナ | テキスト30文字前後 | テキストフィールド(32 bytes)かな | furigana |
メールアドレス | aaa@bbb.cc.dd | メールアドレス(大・小文字を無視) | |
性別 | 男性、女性 | 性別 | gender |
年齢 | 0~99 | 数値 | ageyo |
誕生日 | yyyy年mm月dd日 | 日付(○年○月○日) | birthday |
婚姻状況 | 独身 | テキストフィールド(32 bytes) | maritalStat |
都道府県 | プルダウンから選択 | 都道府県 | prefecture |
電話番号 | 09012345678 | 電話番号 | telephone |
キャリア | docomo、au、SoftBank | テキストフィールド(32 bytes) | carrier |
スタイル | スタイル | テキストフィールド(32 bytes) | style |
コードについて
今回はPHPで作成しています。
APIトークンの保存
APIトークンとシークレットは、環境変数に保存します。以下のように .env
ファイルを作成し、トークンを保存します。
API_TOKEN=your_api_token
API_TOKEN_SECRET=your_api_token_secret
.env の読み込みは vlucas/phpdotenv
を使っています。インストールは composer
で行います。
composer require vlucas/phpdotenv
次に、PHPのコード内で .env
を読み込みます。
require_once __DIR__ . "/vendor/autoload.php";
$dotenv = Dotenv\Dotenv::createImmutable(__DIR__);
$dotenv->load();
APIリクエストURLの取得
APIでリクエストするURLは、以下の手順で取得します。
// ロケータのURL (変更の必要はありません)
$locator = "https://www.pi-pe.co.jp/api/locator";
// スパイラルの操作画面で発行したトークンを設定します。
$TOKEN = $_ENV['API_TOKEN'];
$SECRET = $_ENV['API_TOKEN_SECRET'];
// 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; //トークン
// 送信用のJSONデータを作成します。
$json = json_encode($parameters);
// curlライブラリを使って送信します。
$curl = curl_init($locator);
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);
$response_json = json_decode($response, true);
// サービス用のURL
$APIURL = $response_json['location'];
この時のレスポンスは以下のようになっています。詳細はSPIRAL ver.1 API リファレンスにて確認してください。
{
"code": 0,
"message": "OK",
"location": "https://(APIサーバ)/api/service",
"default_version": 2,
"supported_version": [1, 2],
"use_client_crt": "f"
}
location
にAPIサーバのURLが入っています。
データの作成
一括登録するデータを作成します。一括登録は1,000件までなので、データが1,000件を超える場合は、分割して登録します。
// 送信パラメータを設定します
$parameters = array();
$parameters["db_title"] = "testdata";
$parameters["columns"] = array(
"name", "furigana", "email", "gender", "ageyo", "birthday", "maritalstat",
"prefecture", "telephone", "carrier", "style"
);
// ファイルからデータを読み取り、bulk_insert APIメソッドを呼び出します
$line = file("records10000.txt");
$n = 0;
$parameters["data"] = array();
for ($i = 0; $i < count($line); $i++) {
$data = explode("\t", $line[$i]);
if (count($data) == count($parameters["columns"])) {
array_push($parameters["data"], $data);
if (count($parameters["data"]) >= 1000) {
bulk_insert($parameters);
$parameters["data"] = array();
}
}
}
records10000.txt
の内容は以下のようになっています。データはLLMで作成したダミーです。
山崎 加奈 オオタ アキラ kumiko98@inoue.com 2 18 2007/03/20 0 10 070-4690-4807 rakuten カジュアル
高橋 健一 キムラ ミキ gota@murakami.jp 1 34 1990/11/17 1 39 03-4302-6520 その他 カジュアル
加藤 花子 ゴトウ ケンイチ tsubasatakahashi@yahoo.com 2 53 1972/03/18 1 11 070-2494-5447 docomo カジュアル
田中 浩 ヤマモト ミキ sayuri67@hotmail.com 3 64 1961/02/27 0 20 76-4896-4543 docomo ビジネス
高橋 さゆり ヤマモト キョウスケ nishimurayasuhiro@yahoo.com 1 29 1995/06/09 0 16 090-4311-1213 その他 スポーティ
池田 晃 キムラ ヤスヒロ yasuhiro76@yahoo.com 2 38 1986/09/13 1 27 38-3498-5198 その他 ビジネス
データの一括登録
データが用意できたら、一括登録を行います。リクエストは database/bulk_insert/request
というヘッダーで行います。
$TOKEN = $_ENV['API_TOKEN'];
$SECRET = $_ENV['API_TOKEN_SECRET'];
$APIURL = get_application_url($TOKEN, $SECRET);
$api_headers = array(
"X-SPIRAL-API: database/bulk_insert/request",
"Content-Type: application/json; charset=UTF-8",
);
$param_parameters["spiral_api_token"] = $TOKEN;
$param_parameters["passkey"] = time();
$key = $param_parameters["spiral_api_token"] . "&" . $param_parameters["passkey"];
$param_parameters["signature"] = hash_hmac('sha1', $key, $SECRET, false);
$json = json_encode($param_parameters);
$curl = curl_init($APIURL);
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);
$returnval = curl_multi_getcontent($curl);
curl_close($curl);
return $returnval;
レスポンスは以下のようになります。
{
"code": "0",
"ids": [111,112,113...208,209,210],
"message": "OK"
}
管理画面で見ても、データが一括登録できています。
まとめ
今回はSPIRALのAPIを利用して、複数レコードの一家登録を行う流れを紹介しました。大量のデータを登録する際に1件ずつ行っていると時間がかかり、APIのリクエスト数制限にも引っかかる可能性があります。ぜひ、こちらのAPIを利用してください。
1分あたりのAPIのリクエスト数は、契約によって上限があります。ご注意ください(詳細はAPIのリクエスト数制限を知りたい SPIRAL ver.1 サポートサイトにて)。