1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ローコードプラットフォームSPIRALのAPIを利用する(複数レコードの一括更新の使い方)

Posted at

SPIRALは、主にエンタープライズ向けのローコードプラットフォームになります。ローコードプラットフォームなので、プログラミング知識がなくともWebアプリケーションを開発できるのが魅力です。

SPIRALでは、自社のシステムや外部システムと連携する場合を想定して、APIが公開されています。今回は、そのAPIを利用して、複数レコードを一括更新する流れを解説します。

注意点

SPIRALでは、SPIRAL内部で動作するアカウント内APIと、外部APIの2種類があります。アカウント内APIでは、簡単に操作できるPHP SDKがありますが、外部公開はされていません。そのため、今回はPHPの file_get_contents などを使ってAPI操作をしています。

準備

APIトークンの取得

SPIRALの管理画面で、APIトークンを作成します。ダッシュボードの開発メニュー内のAPIトークンにて、新しいAPIトークンを作成します。

image2.png

作成後に入手できるAPIトークンと、APIトークンシークレットをメモしておきます。

データベースの作成

今回は、作成したのは通常DBになります。SPIRALでは、この他8種類のデータベースが利用できます。

【機能紹介】各種DB | SPIRAL ナレッジサイト

データベースの名前は testdata としました。作成したフィールドは以下の通りです。

フィールド名 サンプル値 差し替えキーワード
名前 テキスト30文字前後 テキストフィールド(64 bytes) name
フリガナ テキスト30文字前後 テキストフィールド(32 bytes)かな furigana
メールアドレス aaa@bbb.cc.dd メールアドレス(大・小文字を無視) mail
性別 男性、女性 性別 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"
}

管理画面で見ても、データが一括登録できています。

image1.jpg

まとめ

今回はSPIRALのAPIを利用して、複数レコードの一家登録を行う流れを紹介しました。大量のデータを登録する際に1件ずつ行っていると時間がかかり、APIのリクエスト数制限にも引っかかる可能性があります。ぜひ、こちらのAPIを利用してください。

1分あたりのAPIのリクエスト数は、契約によって上限があります。ご注意ください(詳細はAPIのリクエスト数制限を知りたい SPIRAL ver.1 サポートサイトにて)。

API SPIRAL ver.1 サポートサイト

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?