3
2

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を利用する(データベースのCRUD操作)

Posted at

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

SPIRALでは、自社のシステムや外部システムと連携する場合を想定して、APIが公開されています。今回は、そのAPIを利用して、データベースのCRUD操作を行う流れを紹介します。

注意点

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

アカウント内API SPIRAL ver.1 サポートサイト

準備

APIトークンの取得

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

FireShot Capture 669 - API設定 - pi-pe.smp.ne.jp.jpg

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

データベースの作成

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

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

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

フィールド名 差し替えキーワード
項目名 name テキストフィールド(32 vtes)
数値 number 正数
登録日時 registerAt 登録日時

image1.png

コードについて

今回は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が入っています。

データベースへの新規登録

まず、データベースへの新規登録を行う流れです。最初にパラメータを作成します。データベース名、フィールド名は作成したものに合わせて修正してください。

// リクエストデータを作成
$parameters = array();
$parameters["spiral_api_token"] = $TOKEN; //トークン
$parameters["db_title"] = "DemoDB"; //DBのタイトル
$parameters["passkey"] = time(); //エポック秒

// 登録したいデータを設定します(1件分)
$parameters["data"] = array(
    array("name" => "name", "value" => "名前の値"),
    array("name" => "number", "value" => "1000"),
    array("name" => "registerAt", "value" => "now"),
);

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

// JSON形式にエンコードします
$json = json_encode($parameters);

そして、リクエストを行います。

// curlライブラリを使って送信します。
$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);
$response = curl_multi_getcontent($curl);
curl_close($curl);

// 画面に表示
print_r(json_decode($response, true));

レスポンスは以下のようになります。

{
  "code": 0,
  "message": "OK",
  "id": 1
}

id に登録したデータのIDが入っています。

image3.png

データベースのデータ取得

次に、登録したデータを取得する流れです。まずはパラメータを作成します。 search_condition にて検索条件を指定し、 select_columns には取得したいフィールド名を指定します。

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

// 検索条件
$parameters["search_condition"] = array(
  array("name" => "id", "value" => "2", "operator" => "="),
);
$parameters["select_columns"] = array(
  "id",
  "name",
  "number",
  "registerAt",
);

// 署名を付けます
$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($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);
$response = curl_multi_getcontent($curl);
curl_close($curl);

// 画面に表示
print_r(json_decode($response, true));

レスポンスとして得られるJSONは以下のようになっています。

{
  "code": "0",
  "data": [
    [
      "2",
      "名前の値",
      "1000",
      "2025年4月10日 11時30分50秒"
    ]
  ],
  "count": "1",
  "header": [
    "id",
    "項目名",
    "数値",
    "登録日時"
  ],
  "label": [
    {},
    {},
    {}
  ],
  "message": "OK"
}

データベースの更新

データベースの更新は、前述の選択条件に対して、データの更新情報を適用します。 data キーで、実際に更新する値とフィールドを指定します。

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

// 検索条件
$parameters["search_condition"] = array(
  array("name" => "id", "value" => "1", "operator" => "="),
);

// 更新データ
$parameters["data"] = array(
  array("name" => "name", "value" => "更新した値"),
  array("name" => "number", "value" => "2000"),
);

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

// 送信用のJSONデータを作成します。
$json = json_encode($parameters);
echo "===> database/update\n";

// curlライブラリを使って送信します。
$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);
$response = curl_multi_getcontent($curl);
curl_close($curl);

// 画面に表示
print_r(json_decode($response, true));

レスポンスは以下のようなJSONです。

{
  "code": 0,
  "message": "OK",
  "count": 1
}

FireShot Capture 694 - DBオペレーション } DBデモ - pi-pe.smp.ne.jp.jpg

データベースの削除

データベースの削除は、選択条件を指定して、その条件にマッチするデータを削除します。

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

// 検索条件
$parameters["search_condition"] = array(
    array("name" => "id", "value" => "1", "operator" => "="),
);

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

// 送信用のJSONデータを作成します。
$json = json_encode($parameters);
echo "===> database/delete\n";

// curlライブラリを使って送信します。
$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);
$response = curl_multi_getcontent($curl);
curl_close($curl);
// 画面に表示
print_r(json_decode($response, true));

レスポンスは更新時と同じです。

{
  "code": 0,
  "message": "OK",
  "count": 1
}

image2.png

まとめ

今回はSPIRALのAPIを利用して、データベースのCRUD操作を行う流れを紹介しました。SPIRALを使って、社内システムや外部システムと連携する際の参考にしてください。

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

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

3
2
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
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?