開発情報・ナレッジ

投稿者: SPIRERS ナレッジ向上チーム 2022年12月21日 (水)

APIメソッドごとのサンプルコードまとめ Record (export)

この記事では Record (export) のメソッドごとに、サンプルコードをまとめています。
SPIRAL ver.2 でAPIを使用する時の参考になれば幸いです。

はじめに

この記事で紹介するサンプルコードでは、共通のcurl送信用モジュールを使用しています。
そのため、必ず下記のモジュールを記載するようにしてください。

※それぞれのメソッドのサンプルコードに「共通モジュール」の記載箇所が明記されていますので、そちらにこのモジュールを貼り付けてご使用ください。
※共通モジュールなので、APIメソッドを複数回実行する場合でも1回だけ記載すれば大丈夫です。
※APIメソッドを複数回実行する場合は、サンプルコードの「API実行」部分に適宜記述を追加してください。
共通モジュール
//------------------------------
// 共通モジュール
//------------------------------
class CommonBase {
    /**
     * シングルトンインスタンス
     * @var UserManager
     */
    protected static $singleton;

    public function __construct() {
        if (self::$singleton) {
            throw new Exception('must be singleton');
        }
        self::$singleton = $this;
    }
    /**
     * シングルトンインスタンスを返す
     * @return UserManager
     */
    public static function getInstance() {
        if (!self::$singleton) {
            return new CommonBase();
        } else {
            return self::$singleton;
        }
    }
    /**
     * V2用 API送信ロジック
     * @return Result
     */
    function apiCurlAction($method, $addUrlPass, $data = null, $multiPart = null, $jsonDecode = null) {
        $header = array(
            "Authorization:Bearer ". API_KEY,
            "X-Spiral-Api-Version: 1.1",
        );
        if($multiPart) {
            $header = array_merge($header, array($multiPart));
        } else {
            $header = array_merge($header, array("Content-Type:application/json"));
        }
        if(APP_ROLE){
			$header = array_merge($header, array("X-Spiral-App-Role: ".APP_ROLE));
		}
        // curl
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($curl, CURLOPT_URL, API_URL. $addUrlPass);
        curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
        if ($method == "POST") {
            if ($multiPart) {
                curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
            } else {
                curl_setopt($curl, CURLOPT_POSTFIELDS , json_encode($data));
            }
            curl_setopt($curl, CURLOPT_CUSTOMREQUEST, $method);
        }
        if ($method == "PATCH") {
            curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($data));
            curl_setopt($curl, CURLOPT_CUSTOMREQUEST, $method);
        }
        if ($method == "DELETE") {
            curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($data));
            curl_setopt($curl, CURLOPT_CUSTOMREQUEST, $method);
        }
        $response = curl_exec($curl);
        if (curl_errno($curl)) echo curl_error($curl);
        curl_close($curl);
        if($jsonDecode){
			return $response;
		}else{
            return json_decode($response, true);
		}
    }
}

設定値に関して

共通で使用する値に関しては、定数として初めに設定します。
具体的には下記のような値を設定してください。
API_URL リクエスト先URLの固定部分です。固定値ですので特に変更する必要はありません。
API_KEY 発行したAPIキーを設定してださい。別途権限の付与が必要になります。
APP_ROLE 設定したアプリロールの識別名を入れてください。全権限の場合は値は空で大丈夫です。
DB_ID レコード操作を行うDBのIDを設定してください。
操作するDBが複数ある場合は「DB_ID_識別名」など適宜定数を追加してください。
APP_ID レコード操作を行うDBがあるアプリのIDを設定してください。
設定値
define("API_URL", "https://api.spiral-platform.com/v1");
define("API_KEY", $SPIRAL->getEnvValue("apikey"));
define("APP_ROLE", "アプリロール識別名");
define("DB_ID", "DBID");
define("APP_ID", "アプリID");
補足
define("API_KEY", $SPIRAL->getEnvValue("apikey"));
上記はAPIキーの記述を「PHP環境変数設定」を利用した場合のコードとなります。
このように定数を設定する時に、ver.2 機能の「PHP環境変数設定」を利用することで、
本番環境とテスト環境でキーが異なっていても、コードを書き換える必要がなく、保守性が高まります。
APIキーなど複数ページで使用するものは、環境変数設定をしておきましょう。

その他詳しくはサポートサイト「PHP環境変数」をご参照ください。

レコード一括出力依頼一覧取得メソッド

レコード一括出力依頼一覧取得を実行したい場合には下記のサンプルコードを使用してみてください。
サンプルコード
<?php
//------------------------------
// 設定値
//------------------------------
define("API_URL", "https://api.spiral-platform.com/v1");
define("API_KEY", $SPIRAL->getEnvValue("apikey"));
define("APP_ROLE", "アプリロール識別名");
define("DB_ID", "DBID");
define("APP_ID", "アプリID");

//------------------------------
// API実行
//------------------------------
$commonBase = CommonBase::getInstance();

$apiResponse = $commonBase->apiCurlAction("GET", "/apps/". APP_ID.  "/dbs/". DB_ID. "/records/exports");

//------------------------------
// 共通モジュール
//------------------------------
// ※こちらに「共通モジュール」を必ず記載してください。
?>
APIリファレンス
補足
デフォルトでは20件取得になっていますが、クエリパラメータを設定することで最大200件まで取得することが可能です。
// 「limit」は1~200の間で指定可能
$query = "?limit=200";

// リクエストするURL末尾に $query を追加
$apiResponse = $commonBase->apiCurlAction("GET", "/apps/". APP_ID.  "/dbs/". DB_ID. "/records/exports". $query);

レコード一括出力依頼作成メソッド

レコード一括出力依頼作成を実行したい場合には下記のサンプルコードを使用してみてください。
サンプルコード
<?php
//------------------------------
// 設定値
//------------------------------
define("API_URL", "https://api.spiral-platform.com/v1");
define("API_KEY", $SPIRAL->getEnvValue("apikey"));
define("APP_ROLE", "アプリロール識別名");
define("DB_ID", "DBID");
define("APP_ID", "アプリID");

//------------------------------
// API実行
//------------------------------
$commonBase = CommonBase::getInstance();

// 出力依頼するファイルの設定
$body = array(
	"fileName" => "ファイル名",
	"fileFormat" => "ファイル拡張子「tsv」or「csv」",
    "characterCode" => "「utf-8」or「utf-8WithBOM」",
    "hasHeader" => "「true」or「false」",
    "headerType" => "「name」or「displayName」or「fieldId」",
    "sort" => "データ行ソート",
    "where" => "レコード抽出条件",
    "fields" => array(
        array("field" => "_id"),
        array("field" => "_createdAt"),
        array("field" => "_updatedAt"),
        array("field" => "フィールドID", "format" => "フィールドフォーマット"),
        array("field" => "フィールドID", "format" => "フィールドフォーマット"),
        array("field" => "フィールドID", "format" => "フィールドフォーマット")
    )
);
$apiResponse = $commonBase->apiCurlAction("POST", "/apps/". APP_ID.  "/dbs/". DB_ID. "/records/exports", $body);

//------------------------------
// 共通モジュール
//------------------------------
// ※こちらに「共通モジュール」を必ず記載してください。
?>
APIリファレンス
補足
ファイル出力を依頼するメソッドです。このメソッドのレスポンスにファイルデータは含まれていません。
ファイルURLは依頼一覧取得か依頼取得メソッドのレスポンスから取得する必要があるため、
作成メソッドを実行した後、取得メソッドを実行してファイルURLを取得するようにしてください。
※ファイルURLよりファイルをDLする場合、ヘッダに Authorization の指定と作成時と同じアプリロール指定が必要です。

また、リクエストボディに必須で含めるべき項目はありませんが、何かしらを指定しないとエラーになります。
サンプルコードでは汎用的に使いそうなものを含めています。

ファイル名の設定
「fileName」の値を設定することで、出力するファイル名を指定することができます。
未指定の場合はデフォルトで「{DB識別名}_{依頼日時の年月日時分}」というファイル名になります。

ファイル文字コードの設定
「characterCode」の値を設定することで、出力するファイルの文字コードを指定することが可能です。
未指定の場合はデフォルトで「utf-8」に指定されており、「utf-8」か「utf-8WithBOM」で設定できます。
出力したファイルを Excel で閲覧したい場合は文字コードを「utf-8WithBOM」としてください。

ヘッダ行の設定
「hasHeader」の値で出力ファイルにヘッダ行を含める、含めないを設定できます。
また「headerType」の値でヘッダ行をフィールド識別名にするか表示名にするかIDにするか設定するとも可能です。

ソートの設定
「sort」の値を設定することで、データ行のソート方法を指定することができます。
デフォルトでは「_id:ASC」と指定されており、レコードIDの昇順でソートされます。
レコードID以外にもDB内のフィールドでの昇順/降順指定が可能であり、
フィールドでソートする場合はフィールド識別名の後に「:ASC」又は「:asc」を入れると昇順、
「:DESC」又は「:desc」を入れると降順と設定できます。
※マルチセレクト、ファイル、パスワード、参照フィールド型および_createdBy、_updatedByは指定不可

出力するレコードの絞り込み設定
「where」の値を指定することで、高度な条件抽出を設定して出力レコードを絞り込むことができます。
条件式の詳細指定方法などに関しては、サポートサイト「条件式や計算式の記法」をご参照ください。
簡易条件で抽出したい場合は、アプリロールの「レコード操作権限」で条件を設定してください。

出力するフィールドの設定
「fields」の値を指定することで、ファイルに含めるフィールドやフィールドフォーマット/順番などを指定できます。
// 「fields」配列内の「field」配列の順番によって、出力ファイルのフィールド並び順を設定することができます。
$body = array(
    "fields" => array(
        array("field" => "_id"),
        array("field" => "フィールドID", "format" => "フィールドフォーマット"),
        array("field" => "フィールドID", "format" => "フィールドフォーマット"),
        array("field" => "フィールドID", "format" => "フィールドフォーマット"),
        array("field" => "_createdAt"),
        array("field" => "_updatedAt")
    )
);
アプリロールで閲覧権限を設定していないフィールドを「fields」内で指定した場合、エラーとなりますのでご注意ください。
ファイルフォーマットは未指定でも大丈夫ですが、指定することで出力形式を指定することができます。
詳細はサポートサイト「レコード一括ダウンロード」の「レコード一括出力APIにおけるフォーマット指定について」をご参照ください。
※「fields」が未指定の場合はアプリロールの「フィールド権限」で許可したものとメンテナンスフィールドのみが出力されます。

レコード一括出力依頼取得メソッド

レコード一括出力依頼取得を実行したい場合には下記のサンプルコードを使用してみてください。
サンプルコード
<?php
//------------------------------
// 設定値
//------------------------------
define("API_URL", "https://api.spiral-platform.com/v1");
define("API_KEY", $SPIRAL->getEnvValue("apikey"));
define("APP_ROLE", "アプリロール識別名");
define("DB_ID", "DBID");
define("APP_ID", "アプリID");

//------------------------------
// API実行
//------------------------------
$commonBase = CommonBase::getInstance();

$recordExportId = "一括出力依頼ID";
$apiResponse = $commonBase->apiCurlAction("GET", "/apps/". APP_ID.  "/dbs/". DB_ID. "/records/exports/". $recordExportId);

//------------------------------
// 共通モジュール
//------------------------------
// ※こちらに「共通モジュール」を必ず記載してください。
?>
APIリファレンス

レコード一括出力依頼キャンセルメソッド

レコード一括出力依頼キャンセルを実行したい場合には下記のサンプルコードを使用してみてください。
サンプルコード
<?php
//------------------------------
// 設定値
//------------------------------
define("API_URL", "https://api.spiral-platform.com/v1");
define("API_KEY", $SPIRAL->getEnvValue("apikey"));
define("APP_ROLE", "アプリロール識別名");
define("DB_ID", "DBID");
define("APP_ID", "アプリID");

//------------------------------
// API実行
//------------------------------
$commonBase = CommonBase::getInstance();

$recordExportId = "一括出力依頼ID";
$apiResponse = $commonBase->apiCurlAction("POST", "/apps/". APP_ID.  "/dbs/". DB_ID. "/records/exports/". $recordExportId. "/cancel");

//------------------------------
// 共通モジュール
//------------------------------
// ※こちらに「共通モジュール」を必ず記載してください。
?>
APIリファレンス

ver.2 でPHPの実行結果を確認する方法

ver.2 では echo などの関数が使えないため、実行結果を確認するためには Thymeleaf を使用する必要があります。
はじめは分かりにくい部分ではありますので、初歩的な確認方法を以下で解説いたします。

1.ソース設定でフリーコンテンツブロックを作成して以下の Thymeleaf を記載してください。
<div>
    <div th:if="${cp.result.isSuccess}">
        <div th:text="${cp.result.value['API_RESPONSE']}"></div>
    </div>
    <div th:if="${!cp.result.isSuccess}">
        <div th:text="${cp.result.errorMessage}"></div>
    </div>
</div>
2.作成したブロックをページに追加してください。
3.ページの「PHP」タブにコードを記載し、コード内で実行結果を Thymeleaf に渡す記載をしてください。
例:出力依頼取得をしたレスポンスの確認がしたい場合
//------------------------------
// API実行
//------------------------------
$commonBase = CommonBase::getInstance();

$recordExportId = "一括出力依頼ID";
$apiResponse = $commonBase->apiCurlAction("GET", "/apps/". APP_ID.  "/dbs/". DB_ID. "/records/exports/". $recordExportId);

// レスポンスを Thymeleaf に受け渡す
$SPIRAL->setTHValue("API_RESPONSE", $apiResponse);
上記ページを作成することで、ページURLを開くと実行結果を確認することができます。
ver.2 でPHPのデバッグをしたい場合などに活用してみてください。
解決しない場合はこちら コンテンツに関しての
要望はこちら